diff --git a/.gitignore b/.gitignore
index 89d4419..c539dcd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -186,6 +186,7 @@
 /ios/third_party/fishhook/src
 /ios/third_party/gcdwebserver/src
 /ios/third_party/ochamcrest/src
+/ios_internal
 /llvm
 /media/cast/logging/cast_logging_proto_lib.xml
 /media/cdm/api
diff --git a/DEPS b/DEPS
index cf32886..af3f069 100644
--- a/DEPS
+++ b/DEPS
@@ -39,11 +39,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': '3eed7ddb25408cdd1c437e65728bac115aeacbd1',
+  'skia_revision': '24dd687ac5f7afb44d593d793180f115f7c68b68',
   # 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': '14b19be8bacdae3184e30790e67da8993000e6db',
+  'v8_revision': '0cc1f9ef2d6db19aed18018e4a1f54f31c0494f7',
   # 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.
@@ -87,7 +87,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling NaCl
   # and whatever else without interference from each other.
-  'nacl_revision': 'f6afd51ac7ea08a2291a076036da8b6cf076f566',
+  'nacl_revision': '9b1c913840204c4794106c2a6db0068e5be5377a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling dEQP
   # and whatever else without interference from each other.
@@ -191,7 +191,7 @@
    Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'b828a1bc02572754455e97508e4b78fc06d5e6fa',
 
   'src/third_party/libjingle/source/talk':
-    Var('chromium_git') + '/external/webrtc/trunk/talk.git' + '@' + '761433d1de0c48512861d6077f821fb328456cda', # commit position 11592
+    Var('chromium_git') + '/external/webrtc/trunk/talk.git' + '@' + 'a4cc90bc9bfb5cc932075aebccb734e38932b107', # commit position 11754
 
   'src/third_party/usrsctp/usrsctplib':
     Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + 'c60ec8b35c3fe6027d7a3faae89d1c8d7dd3ce98',
@@ -215,7 +215,7 @@
    Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067',
 
   'src/third_party/webrtc':
-    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '6dd0ae444aaa75cb9cd6726c3d74376f1aa804c6', # commit position 11686
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'bcf5bfae4efec89e9c8f309f1c8f479e67c404c0', # commit position 11765
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
@@ -275,7 +275,7 @@
 
   'src/third_party/catapult':
     Var('chromium_git') + '/external/github.com/catapult-project/catapult.git' + '@' +
-    'fd95c1a82c71969a24fd911ecfa814c909e20d08',
+    'aa61ec6831705f393f840b180faeee32fa9664d7',
 
   'src/third_party/openh264/src':
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + 'b37cda248234162033e3e11b0335f3131cdfe488',
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index c9505c3..d3efe002 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -446,6 +446,8 @@
     "browser/jni_dependency_factory.h",
     "browser/net/android_stream_reader_url_request_job.cc",
     "browser/net/android_stream_reader_url_request_job.h",
+    "browser/net/aw_cookie_store_wrapper.cc",
+    "browser/net/aw_cookie_store_wrapper.h",
     "browser/net/aw_http_user_agent_settings.cc",
     "browser/net/aw_http_user_agent_settings.h",
     "browser/net/aw_network_change_notifier.cc",
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp
index f9cd1830..8378d0e5 100644
--- a/android_webview/android_webview.gyp
+++ b/android_webview/android_webview.gyp
@@ -350,6 +350,8 @@
         'browser/gl_view_renderer_manager.h',
         'browser/net/android_stream_reader_url_request_job.cc',
         'browser/net/android_stream_reader_url_request_job.h',
+        'browser/net/aw_cookie_store_wrapper.cc',
+        'browser/net/aw_cookie_store_wrapper.h',
         'browser/net/aw_http_user_agent_settings.h',
         'browser/net/aw_http_user_agent_settings.cc',
         'browser/net/aw_network_change_notifier.cc',
diff --git a/android_webview/android_webview_tests.gypi b/android_webview/android_webview_tests.gypi
index 6a2cf65..ab92ffc 100644
--- a/android_webview/android_webview_tests.gypi
+++ b/android_webview/android_webview_tests.gypi
@@ -146,6 +146,7 @@
         'browser/aw_form_database_service_unittest.cc',
         'browser/browser_view_renderer_unittest.cc',
         'browser/net/android_stream_reader_url_request_job_unittest.cc',
+        'browser/net/aw_cookie_store_wrapper_unittest.cc',
         'browser/net/input_stream_reader_unittest.cc',
         'browser/test/fake_window.cc',
         'browser/test/fake_window.h',
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc
index a5e985f..02aa751 100644
--- a/android_webview/browser/aw_browser_context.cc
+++ b/android_webview/browser/aw_browser_context.cc
@@ -15,7 +15,6 @@
 #include "android_webview/browser/aw_resource_context.h"
 #include "android_webview/browser/jni_dependency_factory.h"
 #include "android_webview/browser/net/aw_url_request_context_getter.h"
-#include "android_webview/browser/net/init_native_callback.h"
 #include "android_webview/common/aw_content_client.h"
 #include "base/base_paths_android.h"
 #include "base/bind.h"
@@ -42,7 +41,6 @@
 #include "content/public/browser/ssl_host_state_delegate.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/browser/web_contents.h"
-#include "net/cookies/cookie_store.h"
 #include "net/proxy/proxy_config_service_android.h"
 #include "net/proxy/proxy_service.h"
 
@@ -182,7 +180,6 @@
 }
 
 void AwBrowserContext::PreMainMessageLoopRun() {
-  cookie_store_ = CreateCookieStore(this);
   FilePath cache_path;
   const FilePath fallback_cache_dir =
       GetPath().Append(FILE_PATH_LITERAL("Cache"));
@@ -205,8 +202,7 @@
   InitUserPrefService();
 
   url_request_context_getter_ = new AwURLRequestContextGetter(
-      cache_path, cookie_store_.get(), CreateProxyConfigService(),
-      user_pref_service_.get());
+      cache_path, CreateProxyConfigService(), user_pref_service_.get());
 
   data_reduction_proxy_io_data_.reset(
       new data_reduction_proxy::DataReductionProxyIOData(
diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h
index 94f9f57..84f477dd 100644
--- a/android_webview/browser/aw_browser_context.h
+++ b/android_webview/browser/aw_browser_context.h
@@ -37,10 +37,6 @@
 class DataReductionProxySettings;
 }
 
-namespace net {
-class CookieStore;
-}
-
 namespace policy {
 class URLBlacklistManager;
 class BrowserPolicyConnectorBase;
@@ -149,7 +145,6 @@
   base::FilePath context_storage_path_;
 
   JniDependencyFactory* native_factory_;
-  scoped_refptr<net::CookieStore> cookie_store_;
   scoped_refptr<AwURLRequestContextGetter> url_request_context_getter_;
   scoped_refptr<AwQuotaManagerBridge> quota_manager_bridge_;
   scoped_ptr<AwFormDatabaseService> form_database_service_;
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.cc b/android_webview/browser/net/aw_cookie_store_wrapper.cc
new file mode 100644
index 0000000..8edc444
--- /dev/null
+++ b/android_webview/browser/net/aw_cookie_store_wrapper.cc
@@ -0,0 +1,353 @@
+// 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 "android_webview/browser/net/aw_cookie_store_wrapper.h"
+
+#include <string>
+
+#include "android_webview/browser/net/init_native_callback.h"
+#include "base/memory/ref_counted_delete_on_message_loop.h"
+#include "base/thread_task_runner_handle.h"
+#include "url/gurl.h"
+
+namespace android_webview {
+
+namespace {
+
+// Posts |task| to the thread that the global CookieStore lives on.
+void PostTaskToCookieStoreTaskRunner(const base::Closure& task) {
+  GetCookieStoreTaskRunner()->PostTask(FROM_HERE, task);
+}
+
+// Wraps a subscription to cookie change notifications for the global
+// CookieStore for a consumer that lives on another thread. Handles passing
+// messages between thread, and destroys itself when the consumer unsubscribes.
+// Must be created on the consumer's thread. Each instance only supports a
+// single subscription.
+class SubscriptionWrapper {
+ public:
+  SubscriptionWrapper() : weak_factory_(this) {}
+
+  scoped_ptr<net::CookieStore::CookieChangedSubscription> Subscribe(
+      const GURL& url,
+      const std::string& name,
+      const net::CookieStore::CookieChangedCallback& callback) {
+    // This class is only intended to be used for a single subscription.
+    DCHECK(callback_list_.empty());
+
+    nested_subscription_ =
+        new NestedSubscription(url, name, weak_factory_.GetWeakPtr());
+    return callback_list_.Add(callback);
+  }
+
+ private:
+  // The NestedSubscription is responsible for creating and managing the
+  // underlying subscription to the real CookieStore, and posting notifications
+  // back to |callback_list_|.
+  class NestedSubscription
+      : public base::RefCountedDeleteOnMessageLoop<NestedSubscription> {
+   public:
+    NestedSubscription(const GURL& url,
+                       const std::string& name,
+                       base::WeakPtr<SubscriptionWrapper> subscription_wrapper)
+        : base::RefCountedDeleteOnMessageLoop<NestedSubscription>(
+              GetCookieStoreTaskRunner()),
+          subscription_wrapper_(subscription_wrapper),
+          client_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
+      PostTaskToCookieStoreTaskRunner(
+          base::Bind(&NestedSubscription::Subscribe, this, url, name));
+    }
+
+   private:
+    friend class base::RefCountedDeleteOnMessageLoop<NestedSubscription>;
+    friend class base::DeleteHelper<NestedSubscription>;
+
+    ~NestedSubscription() {}
+
+    void Subscribe(const GURL& url, const std::string& name) {
+      GetCookieStore()->AddCallbackForCookie(
+          url, name, base::Bind(&NestedSubscription::OnChanged, this));
+    }
+
+    void OnChanged(const net::CanonicalCookie& cookie, bool removed) {
+      client_task_runner_->PostTask(
+          FROM_HERE, base::Bind(&SubscriptionWrapper::OnChanged,
+                                subscription_wrapper_, cookie, removed));
+    }
+
+    base::WeakPtr<SubscriptionWrapper> subscription_wrapper_;
+    scoped_refptr<base::TaskRunner> client_task_runner_;
+
+    scoped_ptr<net::CookieStore::CookieChangedSubscription> subscription_;
+
+    DISALLOW_COPY_AND_ASSIGN(NestedSubscription);
+  };
+
+  void OnChanged(const net::CanonicalCookie& cookie, bool removed) {
+    callback_list_.Notify(cookie, removed);
+  }
+
+  // The "list" only had one entry, so can just clean up now.
+  void OnUnsubscribe() { delete this; }
+
+  scoped_refptr<NestedSubscription> nested_subscription_;
+  net::CookieStore::CookieChangedCallbackList callback_list_;
+  base::WeakPtrFactory<SubscriptionWrapper> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(SubscriptionWrapper);
+};
+
+void SetCookieWithOptionsAsyncOnCookieThread(
+    const GURL& url,
+    const std::string& cookie_line,
+    const net::CookieOptions& options,
+    const net::CookieStore::SetCookiesCallback& callback) {
+  GetCookieStore()->SetCookieWithOptionsAsync(url, cookie_line, options,
+                                              callback);
+}
+
+void SetCookieWithDetailsAsyncOnCookieThread(
+    const GURL& url,
+    const std::string& name,
+    const std::string& value,
+    const std::string& domain,
+    const std::string& path,
+    base::Time creation_time,
+    base::Time expiration_time,
+    base::Time last_access_time,
+    bool secure,
+    bool http_only,
+    bool same_site,
+    bool enforce_strict_secure,
+    net::CookiePriority priority,
+    const net::CookieStore::SetCookiesCallback& callback) {
+  GetCookieStore()->SetCookieWithDetailsAsync(
+      url, name, value, domain, path, creation_time, expiration_time,
+      last_access_time, secure, http_only, same_site, enforce_strict_secure,
+      priority, callback);
+}
+
+void GetCookiesWithOptionsAsyncOnCookieThread(
+    const GURL& url,
+    const net::CookieOptions& options,
+    const net::CookieStore::GetCookiesCallback& callback) {
+  GetCookieStore()->GetCookiesWithOptionsAsync(url, options, callback);
+}
+
+void GetCookieListWithOptionsAsyncOnCookieThread(
+    const GURL& url,
+    const net::CookieOptions& options,
+    const net::CookieStore::GetCookieListCallback& callback) {
+  GetCookieStore()->GetCookieListWithOptionsAsync(url, options, callback);
+}
+
+void GetAllCookiesAsyncOnCookieThread(
+    const net::CookieStore::GetCookieListCallback& callback) {
+  GetCookieStore()->GetAllCookiesAsync(callback);
+}
+
+void DeleteCookieAsyncOnCookieThread(const GURL& url,
+                                     const std::string& cookie_name,
+                                     const base::Closure& callback) {
+  GetCookieStore()->DeleteCookieAsync(url, cookie_name, callback);
+}
+
+void DeleteCanonicalCookieAsyncOnCookieThread(
+    const net::CanonicalCookie& cookie,
+    const net::CookieStore::DeleteCallback& callback) {
+  GetCookieStore()->DeleteCanonicalCookieAsync(cookie, callback);
+}
+
+void DeleteAllCreatedBetweenAsyncOnCookieThread(
+    const base::Time& delete_begin,
+    const base::Time& delete_end,
+    const net::CookieStore::DeleteCallback& callback) {
+  GetCookieStore()->DeleteAllCreatedBetweenAsync(delete_begin, delete_end,
+                                                 callback);
+}
+
+void DeleteAllCreatedBetweenForHostAsyncOnCookieThread(
+    const base::Time delete_begin,
+    const base::Time delete_end,
+    const GURL& url,
+    const net::CookieStore::DeleteCallback& callback) {
+  GetCookieStore()->DeleteAllCreatedBetweenForHostAsync(
+      delete_begin, delete_end, url, callback);
+}
+
+void DeleteSessionCookiesAsyncOnCookieThread(
+    const net::CookieStore::DeleteCallback& callback) {
+  GetCookieStore()->DeleteSessionCookiesAsync(callback);
+}
+
+void FlushStoreOnCookieThread(const base::Closure& callback) {
+  GetCookieStore()->FlushStore(callback);
+}
+
+void SetForceKeepSessionStateOnCookieThread() {
+  GetCookieStore()->SetForceKeepSessionState();
+}
+
+}  // namespace
+
+AwCookieStoreWrapper::AwCookieStoreWrapper()
+    : client_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+      weak_factory_(this) {}
+
+void AwCookieStoreWrapper::SetCookieWithOptionsAsync(
+    const GURL& url,
+    const std::string& cookie_line,
+    const net::CookieOptions& options,
+    const net::CookieStore::SetCookiesCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&SetCookieWithOptionsAsyncOnCookieThread, url, cookie_line,
+                 options, CreateWrappedCallback<bool>(callback)));
+}
+
+void AwCookieStoreWrapper::SetCookieWithDetailsAsync(
+    const GURL& url,
+    const std::string& name,
+    const std::string& value,
+    const std::string& domain,
+    const std::string& path,
+    base::Time creation_time,
+    base::Time expiration_time,
+    base::Time last_access_time,
+    bool secure,
+    bool http_only,
+    bool same_site,
+    bool enforce_strict_secure,
+    net::CookiePriority priority,
+    const SetCookiesCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&SetCookieWithDetailsAsyncOnCookieThread, url, name, value,
+                 domain, path, creation_time, expiration_time, last_access_time,
+                 secure, http_only, same_site, enforce_strict_secure, priority,
+                 CreateWrappedCallback<bool>(callback)));
+}
+
+void AwCookieStoreWrapper::GetCookiesWithOptionsAsync(
+    const GURL& url,
+    const net::CookieOptions& options,
+    const GetCookiesCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&GetCookiesWithOptionsAsyncOnCookieThread, url, options,
+                 CreateWrappedCallback<const std::string&>(callback)));
+}
+
+void AwCookieStoreWrapper::GetCookieListWithOptionsAsync(
+    const GURL& url,
+    const net::CookieOptions& options,
+    const GetCookieListCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&GetCookieListWithOptionsAsyncOnCookieThread, url, options,
+                 CreateWrappedCallback<const net::CookieList&>(callback)));
+}
+
+void AwCookieStoreWrapper::GetAllCookiesAsync(
+    const GetCookieListCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&GetAllCookiesAsyncOnCookieThread,
+                 CreateWrappedCallback<const net::CookieList&>(callback)));
+}
+
+void AwCookieStoreWrapper::DeleteCookieAsync(const GURL& url,
+                                             const std::string& cookie_name,
+                                             const base::Closure& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&DeleteCookieAsyncOnCookieThread, url, cookie_name,
+                 CreateWrappedClosureCallback(callback)));
+}
+
+void AwCookieStoreWrapper::DeleteCanonicalCookieAsync(
+    const net::CanonicalCookie& cookie,
+    const DeleteCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&DeleteCanonicalCookieAsyncOnCookieThread, cookie,
+                 CreateWrappedCallback<int>(callback)));
+}
+
+void AwCookieStoreWrapper::DeleteAllCreatedBetweenAsync(
+    const base::Time& delete_begin,
+    const base::Time& delete_end,
+    const DeleteCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&DeleteAllCreatedBetweenAsyncOnCookieThread, delete_begin,
+                 delete_end, CreateWrappedCallback<int>(callback)));
+}
+
+void AwCookieStoreWrapper::DeleteAllCreatedBetweenForHostAsync(
+    const base::Time delete_begin,
+    const base::Time delete_end,
+    const GURL& url,
+    const DeleteCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(base::Bind(
+      &DeleteAllCreatedBetweenForHostAsyncOnCookieThread, delete_begin,
+      delete_end, url, CreateWrappedCallback<int>(callback)));
+}
+
+void AwCookieStoreWrapper::DeleteSessionCookiesAsync(
+    const DeleteCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&DeleteSessionCookiesAsyncOnCookieThread,
+                 CreateWrappedCallback<int>(callback)));
+}
+
+void AwCookieStoreWrapper::FlushStore(const base::Closure& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(base::Bind(
+      &FlushStoreOnCookieThread, CreateWrappedClosureCallback(callback)));
+}
+
+void AwCookieStoreWrapper::SetForceKeepSessionState() {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  PostTaskToCookieStoreTaskRunner(
+      base::Bind(&SetForceKeepSessionStateOnCookieThread));
+}
+
+scoped_ptr<net::CookieStore::CookieChangedSubscription>
+AwCookieStoreWrapper::AddCallbackForCookie(
+    const GURL& url,
+    const std::string& name,
+    const CookieChangedCallback& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+
+  // The SubscriptionWrapper is owned by the subscription itself, and has no
+  // connection to the AwCookieStoreWrapper after creation. Other CookieStore
+  // implementations DCHECK if a subscription outlasts the cookie store,
+  // unfortunately, this design makes DCHECKing if there's an outstanding
+  // subscription when the AwCookieStoreWrapper is destroyed a bit ugly.
+  // TODO(mmenke):  Still worth adding a DCHECK?
+  SubscriptionWrapper* subscription = new SubscriptionWrapper();
+  return subscription->Subscribe(url, name, callback);
+}
+
+AwCookieStoreWrapper::~AwCookieStoreWrapper() {}
+
+base::Closure AwCookieStoreWrapper::CreateWrappedClosureCallback(
+    const base::Closure& callback) {
+  if (callback.is_null())
+    return callback;
+  return base::Bind(base::IgnoreResult(&base::TaskRunner::PostTask),
+                    client_task_runner_, FROM_HERE,
+                    base::Bind(&AwCookieStoreWrapper::RunClosureCallback,
+                               weak_factory_.GetWeakPtr(), callback));
+}
+
+void AwCookieStoreWrapper::RunClosureCallback(const base::Closure& callback) {
+  DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
+  callback.Run();
+}
+
+}  // namespace android_webview
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.h b/android_webview/browser/net/aw_cookie_store_wrapper.h
new file mode 100644
index 0000000..6db831de
--- /dev/null
+++ b/android_webview/browser/net/aw_cookie_store_wrapper.h
@@ -0,0 +1,131 @@
+// 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 <string>
+
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/task_runner.h"
+#include "base/time/time.h"
+#include "net/cookies/canonical_cookie.h"
+#include "net/cookies/cookie_constants.h"
+#include "net/cookies/cookie_store.h"
+
+namespace android_webview {
+
+// A cross-threaded cookie store implementation that wraps the CookieManager's
+// CookieStore. It posts tasks to the CookieStore's thread, and invokes
+// callbacks on the originating thread. Deleting it cancels pending callbacks.
+// This is needed to allow Webview to run the CookieStore on its own thread, to
+// enable synchronous calls into the store on the IO Thread from Java.
+//
+// AwCookieStoreWrapper will only grab the CookieStore pointer from the
+// CookieManager when it's needed, allowing for lazy creation of the
+// CookieStore.
+//
+// AwCookieStoreWrapper may only be called from the thread on which it's
+// created.
+//
+// The CookieManager must outlive the AwCookieStoreWrapper.
+class AwCookieStoreWrapper : public net::CookieStore {
+ public:
+  AwCookieStoreWrapper();
+
+  // CookieStore implementation:
+  void SetCookieWithOptionsAsync(const GURL& url,
+                                 const std::string& cookie_line,
+                                 const net::CookieOptions& options,
+                                 const SetCookiesCallback& callback) override;
+  void SetCookieWithDetailsAsync(const GURL& url,
+                                 const std::string& name,
+                                 const std::string& value,
+                                 const std::string& domain,
+                                 const std::string& path,
+                                 base::Time creation_time,
+                                 base::Time expiration_time,
+                                 base::Time last_access_time,
+                                 bool secure,
+                                 bool http_only,
+                                 bool same_site,
+                                 bool enforce_strict_secure,
+                                 net::CookiePriority priority,
+                                 const SetCookiesCallback& callback) override;
+  void GetCookiesWithOptionsAsync(const GURL& url,
+                                  const net::CookieOptions& options,
+                                  const GetCookiesCallback& callback) override;
+  void GetCookieListWithOptionsAsync(
+      const GURL& url,
+      const net::CookieOptions& options,
+      const GetCookieListCallback& callback) override;
+  void GetAllCookiesAsync(const GetCookieListCallback& callback) override;
+  void DeleteCookieAsync(const GURL& url,
+                         const std::string& cookie_name,
+                         const base::Closure& callback) override;
+  void DeleteCanonicalCookieAsync(const net::CanonicalCookie& cookie,
+                                  const DeleteCallback& callback) override;
+  void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
+                                    const base::Time& delete_end,
+                                    const DeleteCallback& callback) override;
+  void DeleteAllCreatedBetweenForHostAsync(
+      const base::Time delete_begin,
+      const base::Time delete_end,
+      const GURL& url,
+      const DeleteCallback& callback) override;
+  void DeleteSessionCookiesAsync(const DeleteCallback& callback) override;
+  void FlushStore(const base::Closure& callback) override;
+  void SetForceKeepSessionState() override;
+  scoped_ptr<CookieChangedSubscription> AddCallbackForCookie(
+      const GURL& url,
+      const std::string& name,
+      const CookieChangedCallback& callback) override;
+
+ private:
+  ~AwCookieStoreWrapper() override;
+
+  // Used by CreateWrappedCallback below. Takes an arugment of Type and posts
+  // a task to |task_runner| to invoke |callback| with that argument. If
+  // |weak_cookie_store| is deleted before the task is run, the task will not
+  // be run.
+  template <class Type>
+  static void RunCallbackOnClientThread(
+      base::TaskRunner* task_runner,
+      base::WeakPtr<AwCookieStoreWrapper> weak_cookie_store,
+      base::Callback<void(Type)> callback,
+      Type argument) {
+    task_runner->PostTask(
+        FROM_HERE,
+        base::Bind(&AwCookieStoreWrapper::RunClosureCallback, weak_cookie_store,
+                   base::Bind(callback, argument)));
+  }
+
+  // Returns a base::Callback that takes an argument of Type and posts a task to
+  // the |client_task_runner_| to invoke |callback| with that argument.
+  template <class Type>
+  base::Callback<void(Type)> CreateWrappedCallback(
+      base::Callback<void(Type)> callback) {
+    if (callback.is_null())
+      return callback;
+    return base::Bind(&AwCookieStoreWrapper::RunCallbackOnClientThread<Type>,
+                      client_task_runner_, weak_factory_.GetWeakPtr(),
+                      callback);
+  }
+
+  // Returns a base::Closure that posts a task to the |client_task_runner_| to
+  // invoke |callback|.
+  base::Closure CreateWrappedClosureCallback(const base::Closure& callback);
+
+  // Runs |callback|. Used to prevent callbacks from being invoked after the
+  // AwCookieStoreWrapper has been destroyed.
+  void RunClosureCallback(const base::Closure& callback);
+
+  scoped_refptr<base::SingleThreadTaskRunner> client_task_runner_;
+
+  base::WeakPtrFactory<AwCookieStoreWrapper> weak_factory_;
+};
+
+}  // namesspace android_webview
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc b/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc
new file mode 100644
index 0000000..b193229
--- /dev/null
+++ b/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc
@@ -0,0 +1,48 @@
+// 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 "android_webview/browser/net/aw_cookie_store_wrapper.h"
+
+#include "base/memory/ref_counted.h"
+#include "net/cookies/cookie_store.h"
+#include "net/cookies/cookie_store_test_callbacks.h"
+#include "net/cookies/cookie_store_unittest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace android_webview {
+
+struct AwCookieStoreWrapperTestTraits {
+  static scoped_refptr<net::CookieStore> Create() {
+    scoped_refptr<net::CookieStore> cookie_store(new AwCookieStoreWrapper());
+
+    // Android Webview can run multiple tests without restarting the binary,
+    // so have to delete any cookies the global store may have from an earlier
+    // test.
+    net::ResultSavingCookieCallback<int> callback;
+    cookie_store->DeleteAllAsync(
+        base::Bind(&net::ResultSavingCookieCallback<int>::Run,
+                   base::Unretained(&callback)));
+    callback.WaitUntilDone();
+
+    return cookie_store;
+  }
+
+  static const bool supports_http_only = true;
+  static const bool supports_non_dotted_domains = true;
+  static const bool preserves_trailing_dots = true;
+  static const bool filters_schemes = true;
+  static const bool has_path_prefix_bug = false;
+  static const int creation_time_granularity_in_ms = 0;
+  static const bool enforce_strict_secure = false;
+};
+
+}  // namespace android_webview
+
+// Run the standard cookie tests with AwCookieStoreWrapper. Macro must be in
+// net namespace.
+namespace net {
+INSTANTIATE_TYPED_TEST_CASE_P(AwCookieStoreWrapper,
+                              CookieStoreTest,
+                              android_webview::AwCookieStoreWrapperTestTraits);
+}  // namespace net
diff --git a/android_webview/browser/net/aw_url_request_context_getter.cc b/android_webview/browser/net/aw_url_request_context_getter.cc
index 7b54fa9..600ea178 100644
--- a/android_webview/browser/net/aw_url_request_context_getter.cc
+++ b/android_webview/browser/net/aw_url_request_context_getter.cc
@@ -9,6 +9,7 @@
 
 #include "android_webview/browser/aw_browser_context.h"
 #include "android_webview/browser/aw_content_browser_client.h"
+#include "android_webview/browser/net/aw_cookie_store_wrapper.h"
 #include "android_webview/browser/net/aw_http_user_agent_settings.h"
 #include "android_webview/browser/net/aw_network_delegate.h"
 #include "android_webview/browser/net/aw_request_interceptor.h"
@@ -166,13 +167,11 @@
 
 AwURLRequestContextGetter::AwURLRequestContextGetter(
     const base::FilePath& cache_path,
-    net::CookieStore* cookie_store,
     scoped_ptr<net::ProxyConfigService> config_service,
     PrefService* user_pref_service)
     : cache_path_(cache_path),
       net_log_(new net::NetLog()),
       proxy_config_service_(std::move(config_service)),
-      cookie_store_(cookie_store),
       http_user_agent_settings_(new AwHttpUserAgentSettings()) {
   // CreateSystemProxyConfigService for Android must be called on main thread.
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -201,6 +200,8 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   DCHECK(!url_request_context_);
 
+  cookie_store_ = new AwCookieStoreWrapper();
+
   net::URLRequestContextBuilder builder;
   scoped_ptr<AwNetworkDelegate> aw_network_delegate(new AwNetworkDelegate());
 
diff --git a/android_webview/browser/net/aw_url_request_context_getter.h b/android_webview/browser/net/aw_url_request_context_getter.h
index 46c2146e..763a45cf 100644
--- a/android_webview/browser/net/aw_url_request_context_getter.h
+++ b/android_webview/browser/net/aw_url_request_context_getter.h
@@ -36,7 +36,6 @@
  public:
   AwURLRequestContextGetter(
       const base::FilePath& cache_path,
-      net::CookieStore* cookie_store,
       scoped_ptr<net::ProxyConfigService> config_service,
       PrefService* pref_service);
 
diff --git a/android_webview/browser/net/init_native_callback.h b/android_webview/browser/net/init_native_callback.h
index d98867c..34a65c6e 100644
--- a/android_webview/browser/net/init_native_callback.h
+++ b/android_webview/browser/net/init_native_callback.h
@@ -8,6 +8,10 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}
+
 namespace net {
 class CookieStore;
 class URLRequestInterceptor;
@@ -16,9 +20,13 @@
 namespace android_webview {
 class AwBrowserContext;
 
-// Called when the CookieMonster needs to be created.
-scoped_refptr<net::CookieStore> CreateCookieStore(
-    AwBrowserContext* browser_context);
+// Gets the TaskRunner that the CookieStore must be called on.
+scoped_refptr<base::SingleThreadTaskRunner> GetCookieStoreTaskRunner();
+
+// Gets a pointer to the CookieStore managed by the CookieManager.
+// The CookieStore is never deleted. May only be called on the
+// CookieStore's TaskRunner.
+net::CookieStore* GetCookieStore();
 
 // Called lazily when the job factory is being constructed.
 scoped_ptr<net::URLRequestInterceptor>
diff --git a/android_webview/native/cookie_manager.cc b/android_webview/native/cookie_manager.cc
index 08f8246..ebbc67f 100644
--- a/android_webview/native/cookie_manager.cc
+++ b/android_webview/native/cookie_manager.cc
@@ -20,6 +20,7 @@
 #include "base/files/file_util.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
+#include "base/logging.h"
 #include "base/path_service.h"
 #include "base/single_thread_task_runner.h"
 #include "base/synchronization/lock.h"
@@ -33,6 +34,7 @@
 #include "jni/AwCookieManager_jni.h"
 #include "net/cookies/cookie_monster.h"
 #include "net/cookies/cookie_options.h"
+#include "net/cookies/cookie_store.h"
 #include "net/extras/sqlite/cookie_crypto_delegate.h"
 #include "net/url_request/url_request_context.h"
 #include "url/url_constants.h"
@@ -44,7 +46,6 @@
 using base::android::ScopedJavaGlobalRef;
 using content::BrowserThread;
 using net::CookieList;
-using net::CookieMonster;
 
 // In the future, we may instead want to inject an explicit CookieStore
 // dependency into this object during process initialization to avoid
@@ -74,8 +75,8 @@
   void Invoke(bool result) {
     if (!callback_.is_null()) {
       JNIEnv* env = base::android::AttachCurrentThread();
-      Java_AwCookieManager_invokeBooleanCookieCallback(
-          env, callback_.obj(), result);
+      Java_AwCookieManager_invokeBooleanCookieCallback(env, callback_.obj(),
+                                                       result);
     }
   }
 
@@ -144,19 +145,28 @@
   }
 }
 
+// CookieManager creates and owns Webview's CookieStore, in addition to handling
+// calls into the CookieStore from Java.
+//
+// Since Java calls can be made on the IO Thread, and must synchronously return
+// a result, and the CookieStore API allows it to asynchronously return results,
+// the CookieStore must be run on its own thread, to prevent deadlock.
 class CookieManager {
  public:
   static CookieManager* GetInstance();
 
-  scoped_refptr<net::CookieStore> GetCookieStore();
+  // Returns the TaskRunner on which the CookieStore lives.
+  base::SingleThreadTaskRunner* GetCookieStoreTaskRunner();
+  // Returns the CookieStore, creating it if necessary. This must only be called
+  // on the CookieStore TaskRunner.
+  net::CookieStore* GetCookieStore();
 
   void SetShouldAcceptCookies(bool accept);
   bool GetShouldAcceptCookies();
   void SetCookie(const GURL& host,
                  const std::string& cookie_value,
                  scoped_ptr<BoolCookieCallbackHolder> callback);
-  void SetCookieSync(const GURL& host,
-                 const std::string& cookie_value);
+  void SetCookieSync(const GURL& host, const std::string& cookie_value);
   std::string GetCookie(const GURL& host);
   void RemoveSessionCookies(scoped_ptr<BoolCookieCallbackHolder> callback);
   void RemoveAllCookies(scoped_ptr<BoolCookieCallbackHolder> callback);
@@ -179,10 +189,9 @@
   void ExecCookieTaskSync(const base::Callback<void(base::Closure)>& task);
   void ExecCookieTask(const base::Closure& task);
 
-  void SetCookieHelper(
-      const GURL& host,
-      const std::string& value,
-      BoolCallback callback);
+  void SetCookieHelper(const GURL& host,
+                       const std::string& value,
+                       BoolCallback callback);
 
   void GetCookieValueAsyncHelper(const GURL& host,
                                  std::string* result,
@@ -200,93 +209,58 @@
   void HasCookiesAsyncHelper(bool* result, base::Closure complete);
   void HasCookiesCompleted(base::Closure complete,
                            bool* result,
-                           const CookieList& cookies);
+                           const net::CookieList& cookies);
 
-  void CreateCookieMonster(
-    const FilePath& user_data_dir,
-    const scoped_refptr<base::SequencedTaskRunner>& client_task_runner,
-    const scoped_refptr<base::SequencedTaskRunner>& background_task_runner);
-  void EnsureCookieMonsterExistsLocked();
-  bool AllowFileSchemeCookiesLocked();
-  void SetAcceptFileSchemeCookiesLocked(bool accept);
+  // This protects the following two bools, as they're used on multiple threads.
+  base::Lock accept_file_scheme_cookies_lock_;
+  // True if cookies should be allowed for file URLs. Can only be changed prior
+  // to creating the CookieStore.
+  bool accept_file_scheme_cookies_;
+  // True once the cookie store has been created. Just used to track when
+  // |accept_file_scheme_cookies_| can no longer be modified.
+  bool cookie_store_created_;
 
-  scoped_refptr<net::CookieMonster> cookie_monster_;
-  scoped_refptr<base::SingleThreadTaskRunner> cookie_monster_task_runner_;
-  base::Lock cookie_monster_lock_;
+  base::Thread cookie_store_client_thread_;
+  base::Thread cookie_store_backend_thread_;
 
-  scoped_ptr<base::Thread> cookie_monster_client_thread_;
-  scoped_ptr<base::Thread> cookie_monster_backend_thread_;
+  scoped_refptr<base::SingleThreadTaskRunner> cookie_store_task_runner_;
+  scoped_refptr<net::CookieStore> cookie_store_;
 
   DISALLOW_COPY_AND_ASSIGN(CookieManager);
 };
 
 base::LazyInstance<CookieManager>::Leaky g_lazy_instance;
 
+}  // namespace
+
 // static
 CookieManager* CookieManager::GetInstance() {
   return g_lazy_instance.Pointer();
 }
 
-CookieManager::CookieManager() {
+CookieManager::CookieManager()
+    : accept_file_scheme_cookies_(kDefaultFileSchemeAllowed),
+      cookie_store_created_(false),
+      cookie_store_client_thread_("CookieMonsterClient"),
+      cookie_store_backend_thread_("CookieMonsterBackend") {
+  cookie_store_client_thread_.Start();
+  cookie_store_backend_thread_.Start();
+  cookie_store_task_runner_ = cookie_store_client_thread_.task_runner();
 }
 
 CookieManager::~CookieManager() {
 }
 
-void CookieManager::CreateCookieMonster(
-    const FilePath& user_data_dir,
-    const scoped_refptr<base::SequencedTaskRunner>& client_task_runner,
-    const scoped_refptr<base::SequencedTaskRunner>& background_task_runner) {
-  FilePath cookie_store_path =
-      user_data_dir.Append(FILE_PATH_LITERAL("Cookies"));
-
-  background_task_runner->PostTask(
-      FROM_HERE,
-      base::Bind(ImportLegacyCookieStore, cookie_store_path));
-
-  content::CookieStoreConfig cookie_config(
-      cookie_store_path,
-      content::CookieStoreConfig::RESTORED_SESSION_COOKIES,
-      NULL, NULL);
-  cookie_config.client_task_runner = client_task_runner;
-  cookie_config.background_task_runner = background_task_runner;
-  net::CookieStore* cookie_store = content::CreateCookieStore(cookie_config);
-  cookie_monster_ = cookie_store->GetCookieMonster();
-  SetAcceptFileSchemeCookiesLocked(kDefaultFileSchemeAllowed);
-}
-
-void CookieManager::EnsureCookieMonsterExistsLocked() {
-  cookie_monster_lock_.AssertAcquired();
-  if (cookie_monster_.get()) {
-    return;
-  }
-
-  // Create cookie monster using WebView-specific threads, as the rest of the
-  // browser has not been started yet.
-  FilePath user_data_dir;
-  GetUserDataDir(&user_data_dir);
-  cookie_monster_client_thread_.reset(
-      new base::Thread("CookieMonsterClient"));
-  cookie_monster_client_thread_->Start();
-  cookie_monster_task_runner_ = cookie_monster_client_thread_->task_runner();
-  cookie_monster_backend_thread_.reset(
-      new base::Thread("CookieMonsterBackend"));
-  cookie_monster_backend_thread_->Start();
-
-  CreateCookieMonster(user_data_dir, cookie_monster_task_runner_,
-                      cookie_monster_backend_thread_->task_runner());
-}
-
-// Executes the |task| on the |cookie_monster_proxy_| message loop and
-// waits for it to complete before returning.
-
+// Executes the |task| on |cookie_store_task_runner_| and waits for it to
+// complete before returning.
+//
 // To execute a CookieTask synchronously you must arrange for Signal to be
 // called on the waitable event at some point. You can call the bool or int
 // versions of ExecCookieTaskSync, these will supply the caller with a dummy
 // callback which takes an int/bool, throws it away and calls Signal.
 // Alternatively you can call the version which supplies a Closure in which
 // case you must call Run on it when you want the unblock the calling code.
-
+//
 // Ignore a bool callback.
 void CookieManager::ExecCookieTaskSync(
     const base::Callback<void(BoolCallback)>& task) {
@@ -317,17 +291,57 @@
   completion.Wait();
 }
 
-// Executes the |task| on the |cookie_monster_proxy_| message loop.
+// Executes the |task| using |cookie_store_task_runner_|.
 void CookieManager::ExecCookieTask(const base::Closure& task) {
-  base::AutoLock lock(cookie_monster_lock_);
-  EnsureCookieMonsterExistsLocked();
-  cookie_monster_task_runner_->PostTask(FROM_HERE, task);
+  cookie_store_task_runner_->PostTask(FROM_HERE, task);
 }
 
-scoped_refptr<net::CookieStore> CookieManager::GetCookieStore() {
-  base::AutoLock lock(cookie_monster_lock_);
-  EnsureCookieMonsterExistsLocked();
-  return cookie_monster_;
+base::SingleThreadTaskRunner* CookieManager::GetCookieStoreTaskRunner() {
+  return cookie_store_task_runner_.get();
+}
+
+net::CookieStore* CookieManager::GetCookieStore() {
+  DCHECK(cookie_store_task_runner_->RunsTasksOnCurrentThread());
+
+  if (!cookie_store_) {
+    FilePath user_data_dir;
+    GetUserDataDir(&user_data_dir);
+    FilePath cookie_store_path =
+        user_data_dir.Append(FILE_PATH_LITERAL("Cookies"));
+
+    cookie_store_backend_thread_.task_runner()->PostTask(
+        FROM_HERE, base::Bind(ImportLegacyCookieStore, cookie_store_path));
+
+    content::CookieStoreConfig cookie_config(
+        cookie_store_path, content::CookieStoreConfig::RESTORED_SESSION_COOKIES,
+        nullptr, nullptr);
+    cookie_config.client_task_runner = cookie_store_task_runner_;
+    cookie_config.background_task_runner =
+        cookie_store_backend_thread_.task_runner();
+
+    {
+      base::AutoLock lock(accept_file_scheme_cookies_lock_);
+
+      // There are some unknowns about how to correctly handle file:// cookies,
+      // and our implementation for this is not robust.  http://crbug.com/582985
+      //
+      // TODO(mmenke): This call should be removed once we can deprecate and
+      // remove the Android WebView 'CookieManager::setAcceptFileSchemeCookies'
+      // method. Until then, note that this is just not a great idea.
+      cookie_config.cookieable_schemes.insert(
+          cookie_config.cookieable_schemes.begin(),
+          net::CookieMonster::kDefaultCookieableSchemes,
+          net::CookieMonster::kDefaultCookieableSchemes +
+              net::CookieMonster::kDefaultCookieableSchemesCount);
+      if (accept_file_scheme_cookies_)
+        cookie_config.cookieable_schemes.push_back(url::kFileScheme);
+      cookie_store_created_ = true;
+    }
+
+    cookie_store_ = content::CreateCookieStore(cookie_config);
+  }
+
+  return cookie_store_.get();
 }
 
 void CookieManager::SetShouldAcceptCookies(bool accept) {
@@ -366,8 +380,7 @@
   net::CookieOptions options;
   options.set_include_httponly();
 
-  cookie_monster_->SetCookieWithOptionsAsync(
-      host, value, options, callback);
+  GetCookieStore()->SetCookieWithOptionsAsync(host, value, options, callback);
 }
 
 std::string CookieManager::GetCookie(const GURL& host) {
@@ -386,13 +399,9 @@
   net::CookieOptions options;
   options.set_include_httponly();
 
-  cookie_monster_->GetCookiesWithOptionsAsync(
-      host,
-      options,
-      base::Bind(&CookieManager::GetCookieValueCompleted,
-                 base::Unretained(this),
-                 complete,
-                 result));
+  GetCookieStore()->GetCookiesWithOptionsAsync(
+      host, options, base::Bind(&CookieManager::GetCookieValueCompleted,
+                                base::Unretained(this), complete, result));
 }
 
 void CookieManager::GetCookieValueCompleted(base::Closure complete,
@@ -418,9 +427,8 @@
 
 void CookieManager::RemoveSessionCookiesHelper(
     BoolCallback callback) {
-  cookie_monster_->DeleteSessionCookiesAsync(
-      base::Bind(&CookieManager::RemoveCookiesCompleted,
-                 base::Unretained(this),
+  GetCookieStore()->DeleteSessionCookiesAsync(
+      base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this),
                  callback));
 }
 
@@ -446,9 +454,8 @@
 
 void CookieManager::RemoveAllCookiesHelper(
     const BoolCallback callback) {
-  cookie_monster_->DeleteAllAsync(
-      base::Bind(&CookieManager::RemoveCookiesCompleted,
-                 base::Unretained(this),
+  GetCookieStore()->DeleteAllAsync(
+      base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this),
                  callback));
 }
 
@@ -464,7 +471,7 @@
 
 void CookieManager::FlushCookieStoreAsyncHelper(
     base::Closure complete) {
-  cookie_monster_->FlushStore(complete);
+  GetCookieStore()->FlushStore(complete);
 }
 
 bool CookieManager::HasCookies() {
@@ -479,11 +486,9 @@
 // should not be needed.
 void CookieManager::HasCookiesAsyncHelper(bool* result,
                                           base::Closure complete) {
-  cookie_monster_->GetAllCookiesAsync(
-      base::Bind(&CookieManager::HasCookiesCompleted,
-                 base::Unretained(this),
-                 complete,
-                 result));
+  GetCookieStore()->GetAllCookiesAsync(
+      base::Bind(&CookieManager::HasCookiesCompleted, base::Unretained(this),
+                 complete, result));
 }
 
 void CookieManager::HasCookiesCompleted(base::Closure complete,
@@ -494,42 +499,17 @@
 }
 
 bool CookieManager::AllowFileSchemeCookies() {
-  base::AutoLock lock(cookie_monster_lock_);
-  EnsureCookieMonsterExistsLocked();
-  return AllowFileSchemeCookiesLocked();
-}
-
-bool CookieManager::AllowFileSchemeCookiesLocked() {
-  return cookie_monster_->IsCookieableScheme(url::kFileScheme);
+  base::AutoLock lock(accept_file_scheme_cookies_lock_);
+  return accept_file_scheme_cookies_;
 }
 
 void CookieManager::SetAcceptFileSchemeCookies(bool accept) {
-  base::AutoLock lock(cookie_monster_lock_);
-  EnsureCookieMonsterExistsLocked();
-  SetAcceptFileSchemeCookiesLocked(accept);
+  base::AutoLock lock(accept_file_scheme_cookies_lock_);
+  // Can only modify this before the cookie store is created.
+  if (!cookie_store_created_)
+    accept_file_scheme_cookies_ = accept;
 }
 
-void CookieManager::SetAcceptFileSchemeCookiesLocked(bool accept) {
-  // There are some unknowns about how to correctly handle file:// cookies,
-  // and our implementation for this is not robust.  http://crbug.com/582985
-  //
-  // TODO(mmenke): This call should be removed once we can deprecate and remove
-  // the Android WebView 'CookieManager::setAcceptFileSchemeCookies' method.
-  // Until then, note that this is just not a great idea.
-  std::vector<std::string> schemes;
-  schemes.insert(schemes.begin(),
-                 net::CookieMonster::kDefaultCookieableSchemes,
-                 net::CookieMonster::kDefaultCookieableSchemes +
-                     net::CookieMonster::kDefaultCookieableSchemesCount);
-
-  if (accept)
-    schemes.push_back(url::kFileScheme);
-
-  cookie_monster_->SetCookieableSchemes(schemes);
-}
-
-}  // namespace
-
 static void SetShouldAcceptCookies(JNIEnv* env,
                                    const JavaParamRef<jobject>& obj,
                                    jboolean accept) {
@@ -623,8 +603,15 @@
   return CookieManager::GetInstance()->SetAcceptFileSchemeCookies(accept);
 }
 
-scoped_refptr<net::CookieStore> CreateCookieStore(
-    AwBrowserContext* browser_context) {
+// The following two methods are used to avoid a circular project dependency.
+// TODO(mmenke):  This is weird. Maybe there should be a leaky Singleton in
+// browser/net that creates and owns there?
+
+scoped_refptr<base::SingleThreadTaskRunner> GetCookieStoreTaskRunner() {
+  return CookieManager::GetInstance()->GetCookieStoreTaskRunner();
+}
+
+net::CookieStore* GetCookieStore() {
   return CookieManager::GetInstance()->GetCookieStore();
 }
 
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn
index 72f4dd6..92b46fa 100644
--- a/android_webview/test/BUILD.gn
+++ b/android_webview/test/BUILD.gn
@@ -129,6 +129,7 @@
     "../browser/aw_static_cookie_policy_unittest.cc",
     "../browser/browser_view_renderer_unittest.cc",
     "../browser/net/android_stream_reader_url_request_job_unittest.cc",
+    "../browser/net/aw_cookie_store_wrapper_unittest.cc",
     "../browser/net/input_stream_reader_unittest.cc",
     "../browser/test/fake_window.cc",
     "../browser/test/fake_window.h",
diff --git a/android_webview/tools/WebViewShell/test/webexposed/global-interface-listing-expected.txt b/android_webview/tools/WebViewShell/test/webexposed/global-interface-listing-expected.txt
index 620d2ec..711ca19 100644
--- a/android_webview/tools/WebViewShell/test/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/tools/WebViewShell/test/webexposed/global-interface-listing-expected.txt
@@ -129,6 +129,7 @@
     method createDelay
     method createDynamicsCompressor
     method createGain
+    method createIIRFilter
     method createMediaElementSource
     method createMediaStreamDestination
     method createMediaStreamSource
@@ -540,10 +541,6 @@
 interface DOMParser
     method constructor
     method parseFromString
-interface DOMSettableTokenList : DOMTokenList
-    getter value
-    method constructor
-    setter value
 interface DOMStringList
     getter length
     method constructor
@@ -553,6 +550,7 @@
     method constructor
 interface DOMTokenList
     getter length
+    getter value
     method add
     method constructor
     method contains
@@ -561,9 +559,11 @@
     method item
     method keys
     method remove
+    method supports
     method toString
     method toggle
     method values
+    setter value
 interface DataTransfer
     getter dropEffect
     getter effectAllowed
@@ -995,6 +995,7 @@
     method webkitMatchesSelector
     method webkitRequestFullScreen
     method webkitRequestFullscreen
+    setter classList
     setter className
     setter id
     setter innerHTML
@@ -1363,6 +1364,7 @@
     getter width
     method constructor
     method getContext
+    method toBlob
     method toDataURL
     setter height
     setter width
@@ -1956,6 +1958,7 @@
     method constructor
     setter align
 interface HTMLLinkElement : HTMLElement
+    getter as
     getter charset
     getter crossOrigin
     getter disabled
@@ -1965,12 +1968,14 @@
     getter integrity
     getter media
     getter rel
+    getter relList
     getter rev
     getter sheet
     getter sizes
     getter target
     getter type
     method constructor
+    setter as
     setter charset
     setter crossOrigin
     setter disabled
@@ -1979,6 +1984,7 @@
     setter integrity
     setter media
     setter rel
+    setter relList
     setter rev
     setter sizes
     setter target
@@ -2689,6 +2695,9 @@
     getter newVersion
     getter oldVersion
     method constructor
+interface IIRFilterNode : AudioNode
+    method constructor
+    method getFrequencyResponse
 interface IdleDeadline
     getter didTimeout
     method constructor
@@ -2717,7 +2726,6 @@
     getter ctrlKey
     getter keyCode
     getter keyIdentifier
-    getter keyLocation
     getter location
     getter metaKey
     getter repeat
@@ -2852,6 +2860,7 @@
     method constructor
 interface MediaRecorder : EventTarget
     static method isTypeSupported
+    getter audioBitsPerSecond
     getter ignoreMutedMedia
     getter mimeType
     getter ondataavailable
@@ -2862,6 +2871,7 @@
     getter onstop
     getter state
     getter stream
+    getter videoBitsPerSecond
     method constructor
     method pause
     method requestData
@@ -3013,6 +3023,7 @@
     getter appCodeName
     getter appName
     getter appVersion
+    getter bluetooth
     getter connection
     getter cookieEnabled
     getter doNotTrack
@@ -3281,6 +3292,9 @@
     getter promise
     getter reason
     method constructor
+interface RTCCertificate
+    getter expires
+    method constructor
 interface RTCIceCandidate
     getter candidate
     getter sdpMLineIndex
@@ -3516,6 +3530,11 @@
     method constructor
 interface SVGElement : Element
     getter className
+    getter offsetHeight
+    getter offsetLeft
+    getter offsetParent
+    getter offsetTop
+    getter offsetWidth
     getter onabort
     getter onblur
     getter oncancel
@@ -4326,9 +4345,9 @@
     method removeItem
     method replaceItem
 interface SVGUnitTypes
-    static attribute SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
-    static attribute SVG_UNIT_TYPE_UNKNOWN
-    static attribute SVG_UNIT_TYPE_USERSPACEONUSE
+    attribute SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
+    attribute SVG_UNIT_TYPE_UNKNOWN
+    attribute SVG_UNIT_TYPE_USERSPACEONUSE
     method constructor
 interface SVGUseElement : SVGGraphicsElement
     getter height
@@ -4348,9 +4367,9 @@
     method constructor
     setter zoomAndPan
 interface SVGViewSpec
-    static attribute SVG_ZOOMANDPAN_DISABLE
-    static attribute SVG_ZOOMANDPAN_MAGNIFY
-    static attribute SVG_ZOOMANDPAN_UNKNOWN
+    attribute SVG_ZOOMANDPAN_DISABLE
+    attribute SVG_ZOOMANDPAN_MAGNIFY
+    attribute SVG_ZOOMANDPAN_UNKNOWN
     getter preserveAspectRatio
     getter preserveAspectRatioString
     getter transform
@@ -4479,6 +4498,24 @@
     method elementsFromPoint
     method getSelection
     setter innerHTML
+interface SourceBuffer : EventTarget
+    getter appendWindowEnd
+    getter appendWindowStart
+    getter buffered
+    getter mode
+    getter timestampOffset
+    getter updating
+    method abort
+    method appendBuffer
+    method constructor
+    method remove
+    setter appendWindowEnd
+    setter appendWindowStart
+    setter mode
+    setter timestampOffset
+interface SourceBufferList : EventTarget
+    getter length
+    method constructor
 interface Storage
     getter length
     method clear
@@ -5423,6 +5460,7 @@
     method createDelay
     method createDynamicsCompressor
     method createGain
+    method createIIRFilter
     method createMediaElementSource
     method createMediaStreamDestination
     method createMediaStreamSource
@@ -5567,6 +5605,7 @@
     method suspend
     setter oncomplete
 interface webkitRTCPeerConnection : EventTarget
+    static method generateCertificate
     getter iceConnectionState
     getter iceGatheringState
     getter localDescription
@@ -5629,6 +5668,13 @@
     setter search
     setter username
 [GLOBAL OBJECT]
+    attribute BluetoothAdvertisingData
+    attribute BluetoothCharacteristicProperties
+    attribute BluetoothDevice
+    attribute BluetoothRemoteGATTCharacteristic
+    attribute BluetoothRemoteGATTServer
+    attribute BluetoothRemoteGATTService
+    attribute BluetoothUUID
     attribute applicationCache
     attribute caches
     attribute clientInformation
@@ -5672,6 +5718,7 @@
     attribute ondblclick
     attribute ondevicemotion
     attribute ondeviceorientation
+    attribute ondeviceorientationabsolute
     attribute ondrag
     attribute ondragend
     attribute ondragenter
@@ -5783,6 +5830,7 @@
     method clearTimeout
     method close
     method confirm
+    method createImageBitmap
     method fetch
     method find
     method focus
diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc
index a549202..c24a659 100644
--- a/base/trace_event/memory_dump_manager.cc
+++ b/base/trace_event/memory_dump_manager.cc
@@ -185,6 +185,36 @@
     MemoryDumpProvider* mdp,
     const char* name,
     const scoped_refptr<SingleThreadTaskRunner>& task_runner,
+    MemoryDumpProvider::Options options) {
+  options.dumps_on_single_thread_task_runner = true;
+  RegisterDumpProviderInternal(mdp, name, task_runner, options);
+}
+
+void MemoryDumpManager::RegisterDumpProvider(
+    MemoryDumpProvider* mdp,
+    const char* name,
+    const scoped_refptr<SingleThreadTaskRunner>& task_runner) {
+  // Set |dumps_on_single_thread_task_runner| to true because all providers
+  // without task runner are run on dump thread.
+  MemoryDumpProvider::Options options;
+  options.dumps_on_single_thread_task_runner = true;
+  RegisterDumpProviderInternal(mdp, name, task_runner, options);
+}
+
+void MemoryDumpManager::RegisterDumpProviderWithSequencedTaskRunner(
+    MemoryDumpProvider* mdp,
+    const char* name,
+    const scoped_refptr<SequencedTaskRunner>& task_runner,
+    MemoryDumpProvider::Options options) {
+  DCHECK(task_runner);
+  options.dumps_on_single_thread_task_runner = false;
+  RegisterDumpProviderInternal(mdp, name, task_runner, options);
+}
+
+void MemoryDumpManager::RegisterDumpProviderInternal(
+    MemoryDumpProvider* mdp,
+    const char* name,
+    const scoped_refptr<SequencedTaskRunner>& task_runner,
     const MemoryDumpProvider::Options& options) {
   if (dumper_registrations_ignored_for_testing_)
     return;
@@ -205,13 +235,6 @@
     mdp->OnHeapProfilingEnabled(true);
 }
 
-void MemoryDumpManager::RegisterDumpProvider(
-    MemoryDumpProvider* mdp,
-    const char* name,
-    const scoped_refptr<SingleThreadTaskRunner>& task_runner) {
-  RegisterDumpProvider(mdp, name, task_runner, MemoryDumpProvider::Options());
-}
-
 void MemoryDumpManager::UnregisterDumpProvider(MemoryDumpProvider* mdp) {
   UnregisterDumpProviderInternal(mdp, false /* delete_async */);
 }
@@ -242,28 +265,29 @@
   if (take_mdp_ownership_and_delete_async) {
     // The MDP will be deleted whenever the MDPInfo struct will, that is either:
     // - At the end of this function, if no dump is in progress.
-    // - In the prologue of the ContinueAsyncProcessDump().
+    // - Either in SetupNextMemoryDump() or InvokeOnMemoryDump() when MDPInfo is
+    //   removed from |pending_dump_providers|.
     DCHECK(!(*mdp_iter)->owned_dump_provider);
     (*mdp_iter)->owned_dump_provider = std::move(owned_mdp);
   } else if (subtle::NoBarrier_Load(&memory_tracing_enabled_)) {
     // If you hit this DCHECK, your dump provider has a bug.
     // Unregistration of a MemoryDumpProvider is safe only if:
-    // - The MDP has specified a thread affinity (via task_runner()) AND
-    //   the unregistration happens on the same thread (so the MDP cannot
+    // - The MDP has specified a sequenced task runner affinity AND the
+    //   unregistration happens on the same task runner. So that the MDP cannot
     //   unregister and be in the middle of a OnMemoryDump() at the same time.
-    // - The MDP has NOT specified a thread affinity and its ownership is
+    // - The MDP has NOT specified a task runner affinity and its ownership is
     //   transferred via UnregisterAndDeleteDumpProviderSoon().
     // In all the other cases, it is not possible to guarantee that the
     // unregistration will not race with OnMemoryDump() calls.
     DCHECK((*mdp_iter)->task_runner &&
-           (*mdp_iter)->task_runner->BelongsToCurrentThread())
+           (*mdp_iter)->task_runner->RunsTasksOnCurrentThread())
         << "MemoryDumpProvider \"" << (*mdp_iter)->name << "\" attempted to "
         << "unregister itself in a racy way. Please file a crbug.";
   }
 
   // The MDPInfo instance can still be referenced by the
   // |ProcessMemoryDumpAsyncState.pending_dump_providers|. For this reason
-  // the MDPInfo is flagged as disabled. It will cause ContinueAsyncProcessDump
+  // the MDPInfo is flagged as disabled. It will cause InvokeOnMemoryDump()
   // to just skip it, without actually invoking the |mdp|, which might be
   // destroyed by the caller soon after this method returns.
   (*mdp_iter)->disabled = true;
@@ -323,7 +347,7 @@
   {
     AutoLock lock(lock_);
     // |dump_thread_| can be nullptr is tracing was disabled before reaching
-    // here. ContinueAsyncProcessDump is robust enough to tolerate it and will
+    // here. SetupNextMemoryDump() is robust enough to tolerate it and will
     // NACK the dump.
     pmd_async_state.reset(new ProcessMemoryDumpAsyncState(
         args, dump_providers_, session_state_, callback,
@@ -334,45 +358,29 @@
                          TRACE_ID_MANGLE(args.dump_guid),
                          TRACE_EVENT_FLAG_FLOW_OUT);
 
-  // Start the thread hop. |dump_providers_| are kept sorted by thread, so
-  // ContinueAsyncProcessDump will hop at most once per thread (w.r.t. thread
-  // affinity specified by the MemoryDumpProvider(s) in RegisterDumpProvider()).
-  ContinueAsyncProcessDump(pmd_async_state.release());
+  // Start the process dump. This involves task runner hops as specified by the
+  // MemoryDumpProvider(s) in RegisterDumpProvider()).
+  SetupNextMemoryDump(std::move(pmd_async_state));
 }
 
-// At most one ContinueAsyncProcessDump() can be active at any time for a given
-// PMD, regardless of status of the |lock_|. |lock_| is used here purely to
-// ensure consistency w.r.t. (un)registrations of |dump_providers_|.
-// The linearization of dump providers' OnMemoryDump invocations is achieved by
-// means of subsequent PostTask(s).
-//
-// 1) Prologue:
-//   - If this was the last hop, create a trace event, add it to the trace
-//     and finalize (invoke callback).
-//   - Check if we are on the right thread. If not hop and continue there.
-//   - Check if the dump provider is disabled, if so skip the dump.
-// 2) Invoke the dump provider's OnMemoryDump() (unless skipped).
-// 3) Epilogue:
-//   - Unregister the dump provider if it failed too many times consecutively.
-//   - Pop() the MDP from the |pending_dump_providers| list, eventually
-//     destroying the MDPInfo if that was unregistered in the meantime.
-void MemoryDumpManager::ContinueAsyncProcessDump(
-    ProcessMemoryDumpAsyncState* owned_pmd_async_state) {
+// PostTask InvokeOnMemoryDump() to the dump provider's sequenced task runner. A
+// PostTask is always required for a generic SequencedTaskRunner to ensure that
+// no other task is running on it concurrently. SetupNextMemoryDump() and
+// InvokeOnMemoryDump() are called alternatively which linearizes the dump
+// provider's OnMemoryDump invocations.
+// At most one of either SetupNextMemoryDump() or InvokeOnMemoryDump() can be
+// active at any time for a given PMD, regardless of status of the |lock_|.
+// |lock_| is used in these functions purely to ensure consistency w.r.t.
+// (un)registrations of |dump_providers_|.
+void MemoryDumpManager::SetupNextMemoryDump(
+    scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state) {
   // Initalizes the ThreadLocalEventBuffer to guarantee that the TRACE_EVENTs
   // in the PostTask below don't end up registering their own dump providers
   // (for discounting trace memory overhead) while holding the |lock_|.
   TraceLog::GetInstance()->InitializeThreadLocalEventBufferIfSupported();
 
-  // In theory |owned_pmd_async_state| should be a scoped_ptr. The only reason
-  // why it isn't is because of the corner case logic of |did_post_task| below,
-  // which needs to take back the ownership of the |pmd_async_state| when a
-  // thread goes away and consequently the PostTask() fails.
-  // Unfortunately, PostTask() destroys the scoped_ptr arguments upon failure
-  // to prevent accidental leaks. Using a scoped_ptr would prevent us to to
-  // skip the hop and move on. Hence the manual naked -> scoped ptr juggling.
-  auto pmd_async_state = make_scoped_ptr(owned_pmd_async_state);
-  owned_pmd_async_state = nullptr;
-
+  // If this was the last hop, create a trace event, add it to the trace and
+  // finalize process dump (invoke callback).
   if (pmd_async_state->pending_dump_providers.empty())
     return FinalizeDumpAndAddToTrace(std::move(pmd_async_state));
 
@@ -381,66 +389,103 @@
   MemoryDumpProviderInfo* mdpinfo =
       pmd_async_state->pending_dump_providers.back().get();
 
-  // If the dump provider did not specify a thread affinity, dump on
-  // |dump_thread_|. Note that |dump_thread_| might have been Stop()-ed at this
-  // point (if tracing was disabled in the meanwhile). In such case the
-  // PostTask() below will fail, but |task_runner| should always be non-null.
-  SingleThreadTaskRunner* task_runner = mdpinfo->task_runner.get();
-  if (!task_runner)
-    task_runner = pmd_async_state->dump_thread_task_runner.get();
-
-  bool post_task_failed = false;
+  // If the dump provider did not specify a task runner affinity, dump on
+  // |dump_thread_|. Note that |dump_thread_| might have been destroyed
+  // meanwhile.
+  SequencedTaskRunner* task_runner = mdpinfo->task_runner.get();
   if (!task_runner) {
-    // If tracing was disabled before reaching CreateProcessDump() |task_runner|
-    // will be null, as the dump_thread_ would have been already torn down.
-    post_task_failed = true;
-    pmd_async_state->dump_successful = false;
-  } else if (!task_runner->BelongsToCurrentThread()) {
-    // It's time to hop onto another thread.
-    post_task_failed = !task_runner->PostTask(
-        FROM_HERE, Bind(&MemoryDumpManager::ContinueAsyncProcessDump,
-                        Unretained(this), Unretained(pmd_async_state.get())));
-    if (!post_task_failed) {
-      // Ownership is tranferred to the next ContinueAsyncProcessDump().
-      ignore_result(pmd_async_state.release());
-      return;
+    DCHECK(mdpinfo->options.dumps_on_single_thread_task_runner);
+    task_runner = pmd_async_state->dump_thread_task_runner.get();
+    if (!task_runner) {
+      // If tracing was disabled before reaching CreateProcessDump() the
+      // dump_thread_ would have been already torn down. Nack current dump and
+      // continue.
+      pmd_async_state->dump_successful = false;
+      pmd_async_state->pending_dump_providers.pop_back();
+      return SetupNextMemoryDump(std::move(pmd_async_state));
     }
   }
 
-  // At this point either:
-  // - The MDP has a task runner affinity and we are on the right thread.
-  // - The MDP has a task runner affinity but the underlying thread is gone,
-  //   hence the above |post_task_failed| == true.
-  // - The MDP does NOT have a task runner affinity. A locked access is required
-  //   to R/W |disabled| (for the UnregisterAndDeleteDumpProviderSoon() case).
-  bool should_dump;
-  const char* disabled_reason = nullptr;
-  {
+  if (mdpinfo->options.dumps_on_single_thread_task_runner &&
+      task_runner->RunsTasksOnCurrentThread()) {
+    // If |dumps_on_single_thread_task_runner| is true then no PostTask is
+    // required if we are on the right thread.
+    return InvokeOnMemoryDump(pmd_async_state.release());
+  }
+
+  bool did_post_task = task_runner->PostTask(
+      FROM_HERE, Bind(&MemoryDumpManager::InvokeOnMemoryDump, Unretained(this),
+                      Unretained(pmd_async_state.get())));
+
+  if (did_post_task) {
+    // Ownership is tranferred to InvokeOnMemoryDump().
+    ignore_result(pmd_async_state.release());
+    return;
+  }
+
+  // PostTask usually fails only if the process or thread is shut down. So, the
+  // dump provider is disabled here. But, don't disable unbound dump providers.
+  // The utility thread is normally shutdown when disabling the trace and
+  // getting here in this case is expected.
+  if (mdpinfo->task_runner) {
+    LOG(ERROR) << "Disabling MemoryDumpProvider \"" << mdpinfo->name
+               << "\". Failed to post task on the task runner provided.";
+
+    // A locked access is required to R/W |disabled| (for the
+    // UnregisterAndDeleteDumpProviderSoon() case).
     AutoLock lock(lock_);
-    if (!mdpinfo->disabled) {
-      if (mdpinfo->consecutive_failures >= kMaxConsecutiveFailuresCount) {
-        mdpinfo->disabled = true;
-        disabled_reason = "Dump failed multiple times consecutively.";
-      } else if (post_task_failed && mdpinfo->task_runner) {
-        // Don't disable unbound dump providers. The utility thread is normally
-        // shutdown when disabling the trace and getting here in this case is
-        // expected.
-        mdpinfo->disabled = true;
-        disabled_reason = "The thread it was meant to dump onto is gone.";
-      }
-    }
-    should_dump = !mdpinfo->disabled && !post_task_failed;
-  }  // AutoLock lock(lock_);
-
-  if (disabled_reason) {
-    LOG(ERROR) << "Disabling MemoryDumpProvider \"" << mdpinfo->name << "\". "
-               << disabled_reason;
+    mdpinfo->disabled = true;
   }
 
+  // PostTask failed. Ignore the dump provider and continue.
+  pmd_async_state->pending_dump_providers.pop_back();
+  SetupNextMemoryDump(std::move(pmd_async_state));
+}
+
+// This function is called on the right task runner for current MDP. It is
+// either the task runner specified by MDP or |dump_thread_task_runner| if the
+// MDP did not specify task runner. Invokes the dump provider's OnMemoryDump()
+// (unless disabled).
+void MemoryDumpManager::InvokeOnMemoryDump(
+    ProcessMemoryDumpAsyncState* owned_pmd_async_state) {
+  // In theory |owned_pmd_async_state| should be a scoped_ptr. The only reason
+  // why it isn't is because of the corner case logic of |did_post_task|
+  // above, which needs to take back the ownership of the |pmd_async_state| when
+  // the PostTask() fails.
+  // Unfortunately, PostTask() destroys the scoped_ptr arguments upon failure
+  // to prevent accidental leaks. Using a scoped_ptr would prevent us to to
+  // skip the hop and move on. Hence the manual naked -> scoped ptr juggling.
+  auto pmd_async_state = make_scoped_ptr(owned_pmd_async_state);
+  owned_pmd_async_state = nullptr;
+
+  // Read MemoryDumpProviderInfo thread safety considerations in
+  // memory_dump_manager.h when accessing |mdpinfo| fields.
+  MemoryDumpProviderInfo* mdpinfo =
+      pmd_async_state->pending_dump_providers.back().get();
+
+  DCHECK(!mdpinfo->task_runner ||
+         mdpinfo->task_runner->RunsTasksOnCurrentThread());
+
+  bool should_dump;
+  {
+    // A locked access is required to R/W |disabled| (for the
+    // UnregisterAndDeleteDumpProviderSoon() case).
+    AutoLock lock(lock_);
+
+    // Unregister the dump provider if it failed too many times consecutively.
+    if (!mdpinfo->disabled &&
+        mdpinfo->consecutive_failures >= kMaxConsecutiveFailuresCount) {
+      mdpinfo->disabled = true;
+      LOG(ERROR) << "Disabling MemoryDumpProvider \"" << mdpinfo->name
+                 << "\". Dump failed multiple times consecutively.";
+    }
+    should_dump = !mdpinfo->disabled;
+  }  // AutoLock lock(lock_);
+
   if (should_dump) {
     // Invoke the dump provider.
     TRACE_EVENT_WITH_FLOW1(kTraceCategory,
-                           "MemoryDumpManager::ContinueAsyncProcessDump",
+                           "MemoryDumpManager::InvokeOnMemoryDump",
                            TRACE_ID_MANGLE(pmd_async_state->req_args.dump_guid),
                            TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
                            "dump_provider.name", mdpinfo->name);
@@ -455,10 +500,10 @@
     bool dump_successful = mdpinfo->dump_provider->OnMemoryDump(args, pmd);
     mdpinfo->consecutive_failures =
         dump_successful ? 0 : mdpinfo->consecutive_failures + 1;
-  }  // if (!mdpinfo->disabled)
+  }
 
   pmd_async_state->pending_dump_providers.pop_back();
-  ContinueAsyncProcessDump(pmd_async_state.release());
+  SetupNextMemoryDump(std::move(pmd_async_state));
 }
 
 // static
@@ -612,7 +657,7 @@
   }
 
   // Thread stops are blocking and must be performed outside of the |lock_|
-  // or will deadlock (e.g., if ContinueAsyncProcessDump() tries to acquire it).
+  // or will deadlock (e.g., if SetupNextMemoryDump() tries to acquire it).
   periodic_dump_timer_.Stop();
   if (dump_thread)
     dump_thread->Stop();
@@ -625,7 +670,7 @@
 MemoryDumpManager::MemoryDumpProviderInfo::MemoryDumpProviderInfo(
     MemoryDumpProvider* dump_provider,
     const char* name,
-    const scoped_refptr<SingleThreadTaskRunner>& task_runner,
+    const scoped_refptr<SequencedTaskRunner>& task_runner,
     const MemoryDumpProvider::Options& options)
     : dump_provider(dump_provider),
       name(name),
diff --git a/base/trace_event/memory_dump_manager.h b/base/trace_event/memory_dump_manager.h
index b713079..e9b09f8 100644
--- a/base/trace_event/memory_dump_manager.h
+++ b/base/trace_event/memory_dump_manager.h
@@ -69,9 +69,9 @@
   //  - name: a friendly name (duplicates allowed). Used for debugging and
   //      run-time profiling of memory-infra internals. Must be a long-lived
   //      C string.
-  //  - task_runner: if non-null, all the calls to |mdp| will be
-  //      issued on the given thread. Otherwise, |mdp| should be able to
-  //      handle calls on arbitrary threads.
+  //  - task_runner: either a SingleThreadTaskRunner or SequencedTaskRunner. All
+  //      the calls to |mdp| will be run on the given |task_runner|. If passed
+  //      null |mdp| should be able to handle calls on arbitrary threads.
   //  - options: extra optional arguments. See memory_dump_provider.h.
   void RegisterDumpProvider(
       MemoryDumpProvider* mdp,
@@ -81,7 +81,12 @@
       MemoryDumpProvider* mdp,
       const char* name,
       const scoped_refptr<SingleThreadTaskRunner>& task_runner,
-      const MemoryDumpProvider::Options& options);
+      MemoryDumpProvider::Options options);
+  void RegisterDumpProviderWithSequencedTaskRunner(
+      MemoryDumpProvider* mdp,
+      const char* name,
+      const scoped_refptr<SequencedTaskRunner>& task_runner,
+      MemoryDumpProvider::Options options);
   void UnregisterDumpProvider(MemoryDumpProvider* mdp);
 
   // Unregisters an unbound dump provider and takes care about its deletion
@@ -153,14 +158,15 @@
   //   inside ProcessMemoryDumpAsyncState is removed.
   // - In most cases, the MDPInfo is destroyed within UnregisterDumpProvider().
   // - If UnregisterDumpProvider() is called while a dump is in progress, the
-  //   MDPInfo is destroyed in the epilogue of ContinueAsyncProcessDump(), when
-  //   the copy inside ProcessMemoryDumpAsyncState is erase()-d.
+  //   MDPInfo is destroyed in SetupNextMemoryDump() or InvokeOnMemoryDump(),
+  //   when the copy inside ProcessMemoryDumpAsyncState is erase()-d.
   // - The non-const fields of MemoryDumpProviderInfo are safe to access only
-  //   in the |task_runner| thread, unless the thread has been destroyed.
+  //   on tasks running in the |task_runner|, unless the thread has been
+  //   destroyed.
   struct MemoryDumpProviderInfo
       : public RefCountedThreadSafe<MemoryDumpProviderInfo> {
-    // Define a total order based on the thread (i.e. |task_runner|) affinity,
-    // so that all MDP belonging to the same thread are adjacent in the set.
+    // Define a total order based on the |task_runner| affinity, so that MDPs
+    // belonging to the same SequencedTaskRunner are adjacent in the set.
     struct Comparator {
       bool operator()(const scoped_refptr<MemoryDumpProviderInfo>& a,
                       const scoped_refptr<MemoryDumpProviderInfo>& b) const;
@@ -171,7 +177,7 @@
     MemoryDumpProviderInfo(
         MemoryDumpProvider* dump_provider,
         const char* name,
-        const scoped_refptr<SingleThreadTaskRunner>& task_runner,
+        const scoped_refptr<SequencedTaskRunner>& task_runner,
         const MemoryDumpProvider::Options& options);
 
     MemoryDumpProvider* const dump_provider;
@@ -183,9 +189,9 @@
     // Human readable name, for debugging and testing. Not necessarily unique.
     const char* const name;
 
-    // The task_runner affinity. Can be nullptr, in which case the dump provider
+    // The task runner affinity. Can be nullptr, in which case the dump provider
     // will be invoked on |dump_thread_|.
-    const scoped_refptr<SingleThreadTaskRunner> task_runner;
+    const scoped_refptr<SequencedTaskRunner> task_runner;
 
     // The |options| arg passed to RegisterDumpProvider().
     const MemoryDumpProvider::Options options;
@@ -204,8 +210,9 @@
   };
 
   // Holds the state of a process memory dump that needs to be carried over
-  // across threads in order to fulfil an asynchronous CreateProcessDump()
-  // request. At any time exactly one thread owns a ProcessMemoryDumpAsyncState.
+  // across task runners in order to fulfil an asynchronous CreateProcessDump()
+  // request. At any time exactly one task runner owns a
+  // ProcessMemoryDumpAsyncState.
   struct ProcessMemoryDumpAsyncState {
     ProcessMemoryDumpAsyncState(
         MemoryDumpRequestArgs req_args,
@@ -277,17 +284,30 @@
   void CreateProcessDump(const MemoryDumpRequestArgs& args,
                          const MemoryDumpCallback& callback);
 
-  // Continues the ProcessMemoryDump started by CreateProcessDump(), hopping
-  // across threads as needed as specified by MDPs in RegisterDumpProvider().
-  void ContinueAsyncProcessDump(
-      ProcessMemoryDumpAsyncState* owned_pmd_async_state);
+  // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by
+  // the MDP while registration. On failure to do so, skips and continues to
+  // next MDP.
+  void SetupNextMemoryDump(
+      scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state);
+
+  // Invokes OnMemoryDump() of the next MDP and calls SetupNextMemoryDump() at
+  // the end to continue the ProcessMemoryDump. Should be called on the MDP task
+  // runner.
+  void InvokeOnMemoryDump(ProcessMemoryDumpAsyncState* owned_pmd_async_state);
+
+  // Helper for RegierDumpProvider* functions.
+  void RegisterDumpProviderInternal(
+      MemoryDumpProvider* mdp,
+      const char* name,
+      const scoped_refptr<SequencedTaskRunner>& task_runner,
+      const MemoryDumpProvider::Options& options);
 
   // Helper for the public UnregisterDumpProvider* functions.
   void UnregisterDumpProviderInternal(MemoryDumpProvider* mdp,
                                       bool take_mdp_ownership_and_delete_async);
 
-  // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by thread
-  // affinity (MDPs belonging to the same thread are adjacent).
+  // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task
+  // runner affinity (MDPs belonging to the same task runners are adjacent).
   MemoryDumpProviderInfo::OrderedSet dump_providers_;
 
   // Shared among all the PMDs to keep state scoped to the tracing session.
@@ -309,7 +329,8 @@
   // For time-triggered periodic dumps.
   RepeatingTimer periodic_dump_timer_;
 
-  // Thread used for MemoryDumpProviders which don't specify a thread affinity.
+  // Thread used for MemoryDumpProviders which don't specify a task runner
+  // affinity.
   scoped_ptr<Thread> dump_thread_;
 
   // The unique id of the child process. This is created only for tracing and is
diff --git a/base/trace_event/memory_dump_manager_unittest.cc b/base/trace_event/memory_dump_manager_unittest.cc
index 89a6e3d..138ba69 100644
--- a/base/trace_event/memory_dump_manager_unittest.cc
+++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -19,6 +19,7 @@
 #include "base/test/trace_event_analyzer.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/threading/platform_thread.h"
+#include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "base/trace_event/process_memory_dump.h"
@@ -50,18 +51,44 @@
 
 void RegisterDumpProvider(
     MemoryDumpProvider* mdp,
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    const MemoryDumpProvider::Options& options) {
+    const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+    const MemoryDumpProvider::Options& options,
+    bool dumps_on_single_thread_task_runner) {
   MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
   mdm->set_dumper_registrations_ignored_for_testing(false);
-  mdm->RegisterDumpProvider(mdp, "TestDumpProvider", task_runner, options);
+  const char* kMDPName = "TestDumpProvider";
+  if (dumps_on_single_thread_task_runner) {
+    scoped_refptr<base::SingleThreadTaskRunner> single_thread_task_runner =
+        static_cast<base::SingleThreadTaskRunner*>(task_runner.get());
+    mdm->RegisterDumpProvider(mdp, kMDPName,
+                              std::move(single_thread_task_runner), options);
+  } else {
+    mdm->RegisterDumpProviderWithSequencedTaskRunner(mdp, kMDPName, task_runner,
+                                                     options);
+  }
   mdm->set_dumper_registrations_ignored_for_testing(true);
 }
 
+void RegisterDumpProvider(
+    MemoryDumpProvider* mdp,
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+    const MemoryDumpProvider::Options& options) {
+  RegisterDumpProvider(mdp, task_runner, options,
+                       true /* dumps_on_single_thread_task_runner */);
+}
+
 void RegisterDumpProvider(MemoryDumpProvider* mdp) {
   RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options());
 }
 
+void RegisterDumpProviderWithSequencedTaskRunner(
+    MemoryDumpProvider* mdp,
+    const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+    const MemoryDumpProvider::Options& options) {
+  RegisterDumpProvider(mdp, task_runner, options,
+                       false /* dumps_on_single_thread_task_runner */);
+}
+
 void OnTraceDataCollected(Closure quit_closure,
                           trace_event::TraceResultBuffer* buffer,
                           const scoped_refptr<RefCountedString>& json,
@@ -111,6 +138,46 @@
   bool enable_mock_destructor;
 };
 
+class TestSequencedTaskRunner : public SequencedTaskRunner {
+ public:
+  TestSequencedTaskRunner()
+      : worker_pool_(
+            new SequencedWorkerPool(2 /* max_threads */, "Test Task Runner")),
+        enabled_(true),
+        num_of_post_tasks_(0) {}
+
+  void set_enabled(bool value) { enabled_ = value; }
+  unsigned no_of_post_tasks() const { return num_of_post_tasks_; }
+
+  bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
+                                  const Closure& task,
+                                  TimeDelta delay) override {
+    NOTREACHED();
+    return false;
+  }
+
+  bool PostDelayedTask(const tracked_objects::Location& from_here,
+                       const Closure& task,
+                       TimeDelta delay) override {
+    num_of_post_tasks_++;
+    if (enabled_)
+      return worker_pool_->PostSequencedWorkerTask(token_, from_here, task);
+    return false;
+  }
+
+  bool RunsTasksOnCurrentThread() const override {
+    return worker_pool_->IsRunningSequenceOnCurrentThread(token_);
+  }
+
+ private:
+  ~TestSequencedTaskRunner() override {}
+
+  scoped_refptr<SequencedWorkerPool> worker_pool_;
+  const SequencedWorkerPool::SequenceToken token_;
+  bool enabled_;
+  unsigned num_of_post_tasks_;
+};
+
 class MemoryDumpManagerTest : public testing::Test {
  public:
   MemoryDumpManagerTest() : testing::Test(), kDefaultOptions() {}
@@ -442,6 +509,50 @@
   DisableTracing();
 }
 
+// Check that the memory dump calls are always posted on task runner for
+// SequencedTaskRunner case and that the dump provider gets disabled when
+// PostTask fails, but the dump still succeeds.
+TEST_F(MemoryDumpManagerTest, PostTaskForSequencedTaskRunner) {
+  InitializeMemoryDumpManager(false /* is_coordinator */);
+  std::vector<MockMemoryDumpProvider> mdps(3);
+  scoped_refptr<TestSequencedTaskRunner> task_runner1(
+      make_scoped_refptr(new TestSequencedTaskRunner()));
+  scoped_refptr<TestSequencedTaskRunner> task_runner2(
+      make_scoped_refptr(new TestSequencedTaskRunner()));
+  RegisterDumpProviderWithSequencedTaskRunner(&mdps[0], task_runner1,
+                                              kDefaultOptions);
+  RegisterDumpProviderWithSequencedTaskRunner(&mdps[1], task_runner2,
+                                              kDefaultOptions);
+  RegisterDumpProviderWithSequencedTaskRunner(&mdps[2], task_runner2,
+                                              kDefaultOptions);
+  // |mdps[0]| should be disabled permanently after first dump.
+  EXPECT_CALL(mdps[0], OnMemoryDump(_, _)).Times(0);
+  EXPECT_CALL(mdps[1], OnMemoryDump(_, _)).Times(2);
+  EXPECT_CALL(mdps[2], OnMemoryDump(_, _)).Times(2);
+  EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2);
+
+  EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
+
+  task_runner1->set_enabled(false);
+  last_callback_success_ = false;
+  RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
+                           MemoryDumpLevelOfDetail::DETAILED);
+  // Tasks should be individually posted even if |mdps[1]| and |mdps[2]| belong
+  // to same task runner.
+  EXPECT_EQ(1u, task_runner1->no_of_post_tasks());
+  EXPECT_EQ(2u, task_runner2->no_of_post_tasks());
+  EXPECT_TRUE(last_callback_success_);
+
+  task_runner1->set_enabled(true);
+  last_callback_success_ = false;
+  RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
+                           MemoryDumpLevelOfDetail::DETAILED);
+  EXPECT_EQ(2u, task_runner1->no_of_post_tasks());
+  EXPECT_EQ(4u, task_runner2->no_of_post_tasks());
+  EXPECT_TRUE(last_callback_success_);
+  DisableTracing();
+}
+
 // Checks that providers get disabled after 3 consecutive failures, but not
 // otherwise (e.g., if interleaved).
 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
diff --git a/base/trace_event/memory_dump_provider.h b/base/trace_event/memory_dump_provider.h
index f03fcbd..79ab7934 100644
--- a/base/trace_event/memory_dump_provider.h
+++ b/base/trace_event/memory_dump_provider.h
@@ -26,14 +26,20 @@
  public:
   // Optional arguments for MemoryDumpManager::RegisterDumpProvider().
   struct Options {
-    Options() : target_pid(kNullProcessId) {}
-    explicit Options(ProcessId target_pid) : target_pid(target_pid) {}
+    Options()
+        : target_pid(kNullProcessId),
+          dumps_on_single_thread_task_runner(false) {}
 
     // If the dump provider generates dumps on behalf of another process,
-    // |target_process| contains the pid of that process.
+    // |target_pid| contains the pid of that process.
     // The default value is kNullProcessId, which means that the dump provider
     // generates dumps for the current process.
     ProcessId target_pid;
+
+    // |dumps_on_single_thread_task_runner| is true if the dump provider runs on
+    // a SingleThreadTaskRunner, which is usually the case. It is faster to run
+    // all providers that run on the same thread together without thread hops.
+    bool dumps_on_single_thread_task_runner;
   };
 
   virtual ~MemoryDumpProvider() {}
diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py
index 1e60c2e..b326ba81 100755
--- a/build/android/gyp/lint.py
+++ b/build/android/gyp/lint.py
@@ -19,8 +19,9 @@
                                          '..', '..', '..'))
 
 
-def _RunLint(lint_path, config_path, processed_config_path, manifest_path,
-             result_path, product_dir, sources, jar_path, resource_dir=None):
+def _OnStaleMd5(changes, lint_path, config_path, processed_config_path,
+                manifest_path, result_path, product_dir, sources, jar_path,
+                resource_dir=None, can_fail_build=False):
 
   def _RelativizePath(path):
     """Returns relative path to top-level src dir.
@@ -71,6 +72,10 @@
           print >> sys.stderr, error_line.encode('utf-8')
     return len(issues)
 
+  if changes.AddedOrModifiedOnly():
+    changed_paths = set(changes.IterChangedPaths())
+    sources = [s for s in sources if s in changed_paths]
+
   with build_utils.TempDir() as temp_dir:
     _ProcessConfigFile()
 
@@ -121,7 +126,7 @@
       if not os.path.exists(result_path):
         print 'Something is wrong:'
         print e
-        return 1
+        raise
 
       # There are actual lint issues
       else:
@@ -132,7 +137,7 @@
           print 'File contents:'
           with open(result_path) as f:
             print f.read()
-          return 1
+          raise
 
         _ProcessResultFile()
         msg = ('\nLint found %d new issues.\n'
@@ -147,9 +152,8 @@
                                              'lint', 'suppress.py')),
                 _RelativizePath(result_path)))
         print >> sys.stderr, msg
-        return 1
-
-  return 0
+        if can_fail_build:
+          raise Exception('Lint failed.')
 
 
 def main():
@@ -181,8 +185,6 @@
                                  'result_path', 'product_dir',
                                  'jar_path'])
 
-  rc = 0
-
   if options.enable:
     sources = []
     if options.src_dirs:
@@ -193,21 +195,34 @@
     else:
       print 'One of --src-dirs or --java-files must be specified.'
       return 1
-    rc = _RunLint(options.lint_path, options.config_path,
-                  options.processed_config_path,
-                  options.manifest_path, options.result_path,
-                  options.product_dir, sources, options.jar_path,
-                  options.resource_dir)
 
-  if options.depfile:
-    build_utils.WriteDepfile(
-        options.depfile,
-        build_utils.GetPythonDependencies())
+    input_paths = [
+        options.lint_path,
+        options.config_path,
+        options.manifest_path,
+        options.jar_path,
+    ]
+    input_paths.extend(sources)
+    if options.resource_dir:
+      input_paths.extend(build_utils.FindInDirectory(options.resource_dir, '*'))
 
-  if options.stamp and not rc:
-    build_utils.Touch(options.stamp)
+    input_strings = [ options.processed_config_path ]
+    output_paths = [ options.result_path ]
 
-  return rc if options.can_fail_build else 0
+    build_utils.CallAndWriteDepfileIfStale(
+        lambda changes: _OnStaleMd5(changes, options.lint_path,
+                                    options.config_path,
+                                    options.processed_config_path,
+                                    options.manifest_path, options.result_path,
+                                    options.product_dir, sources,
+                                    options.jar_path,
+                                    resource_dir=options.resource_dir,
+                                    can_fail_build=options.can_fail_build),
+        options,
+        input_paths=input_paths,
+        input_strings=input_strings,
+        output_paths=output_paths,
+        pass_changes=True)
 
 
 if __name__ == '__main__':
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 0ca1758..369ba35 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -579,8 +579,8 @@
             </intent-filter>
         </receiver>
 
-        <!-- Service Worker Background Sync GCM scheduler task -->
-        <service android:name="org.chromium.chrome.browser.BackgroundSyncLauncherService"
+        <!-- GcmTaskService implementation to wake Chrome on scheduled events -->
+        <service android:name="org.chromium.chrome.browser.ChromeBackgroundService"
             android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
             android:exported="true">
             <intent-filter>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
index ffec5a9..69537e4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
@@ -30,6 +30,8 @@
 public class BackgroundSyncLauncher {
     private static final String TAG = "BgSyncLauncher";
 
+    public static final String TASK_TAG = "BackgroundSync Event";
+
     static final String PREF_BACKGROUND_SYNC_LAUNCH_NEXT_ONLINE = "bgsync_launch_next_online";
     // The instance of BackgroundSyncLauncher currently owned by a C++
     // BackgroundSyncLauncherAndroid, if any. If it is non-null then the browser is running.
@@ -191,8 +193,8 @@
         // the Play Store. In this case, scheduling the task will fail silently.
         final long minDelaySecs = minDelayMs / 1000;
         OneoffTask oneoff = new OneoffTask.Builder()
-                                    .setService(BackgroundSyncLauncherService.class)
-                                    .setTag("BackgroundSync Event")
+                                    .setService(ChromeBackgroundService.class)
+                                    .setTag(TASK_TAG)
                                     // We have to set a non-zero execution window here
                                     .setExecutionWindow(minDelaySecs, minDelaySecs + 1)
                                     .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
@@ -212,7 +214,7 @@
 
     private static boolean removeScheduledTasks(GcmNetworkManager scheduler) {
         try {
-            scheduler.cancelAllTasks(BackgroundSyncLauncherService.class);
+            scheduler.cancelTask(TASK_TAG, ChromeBackgroundService.class);
         } catch (IllegalArgumentException e) {
             // This occurs when BackgroundSyncLauncherService is not found in the application
             // manifest. This should not happen in code that reaches here, but has been seen in
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncherService.java b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncherService.java
deleted file mode 100644
index a6219fd18..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncherService.java
+++ /dev/null
@@ -1,69 +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.
-
-package org.chromium.chrome.browser;
-
-import android.content.Context;
-
-import com.google.android.gms.gcm.GcmNetworkManager;
-import com.google.android.gms.gcm.GcmTaskService;
-import com.google.android.gms.gcm.TaskParams;
-
-import org.chromium.base.Log;
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.base.annotations.SuppressFBWarnings;
-import org.chromium.base.library_loader.LibraryProcessType;
-import org.chromium.base.library_loader.ProcessInitException;
-import org.chromium.content.app.ContentApplication;
-import org.chromium.content.browser.BrowserStartupController;
-
-/**
- * {@link BackgroundSyncLauncherService} is scheduled through the {@link GcmNetworkManager}
- * when the browser needs to be launched in response to changing network or power conditions.
- */
-public class BackgroundSyncLauncherService extends GcmTaskService {
-    private static final String TAG = "BgSyncLauncher";
-
-    @Override
-    @VisibleForTesting
-    public int onRunTask(TaskParams params) {
-        // Start the browser. The browser's BackgroundSyncManager (for the active profile) will
-        // start, check the network, and run any necessary sync events. This task runs with a wake
-        // lock, but has a three minute timeout, so we need to start the browser in its own task.
-        // TODO(jkarlin): Protect the browser sync event with a wake lock. See crbug.com/486020.
-        Log.v(TAG, "Starting Browser after coming online");
-        final Context context = this;
-        ThreadUtils.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (!BackgroundSyncLauncher.hasInstance()) {
-                    launchBrowser(context);
-                }
-            }
-        });
-        return GcmNetworkManager.RESULT_SUCCESS;
-    }
-
-    @VisibleForTesting
-    @SuppressFBWarnings("DM_EXIT")
-    protected void launchBrowser(Context context) {
-        ContentApplication.initCommandLine(context);
-        try {
-            BrowserStartupController.get(context, LibraryProcessType.PROCESS_BROWSER)
-                    .startBrowserProcessesSync(false);
-        } catch (ProcessInitException e) {
-            Log.e(TAG, "ProcessInitException while starting the browser process");
-            // Since the library failed to initialize nothing in the application
-            // can work, so kill the whole application not just the activity.
-            System.exit(-1);
-        }
-    }
-
-    @Override
-    @VisibleForTesting
-    public void onInitializeTasks() {
-        BackgroundSyncLauncher.rescheduleTasksOnUpgrade(this);
-    }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 7fe5a78e..fb7f9206 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -89,7 +89,6 @@
 import org.chromium.chrome.browser.metrics.UmaSessionStats;
 import org.chromium.chrome.browser.nfc.BeamController;
 import org.chromium.chrome.browser.nfc.BeamProvider;
-import org.chromium.chrome.browser.ntp.snippets.SnippetsController;
 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
 import org.chromium.chrome.browser.omaha.UpdateMenuItemHelper;
 import org.chromium.chrome.browser.pageinfo.WebsiteSettingsPopup;
@@ -694,12 +693,6 @@
             mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simpleName);
         }
         recordKeyboardLocaleUma();
-
-        // TODO(treib): Remove this when we have the proper morning reads fetching logic in place
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_SNIPPETS)) {
-            // Initialize snippets
-            SnippetsController.get(this).fetchSnippets(false);
-        }
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
new file mode 100644
index 0000000..7828402
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackgroundService.java
@@ -0,0 +1,101 @@
+// 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.
+
+package org.chromium.chrome.browser;
+
+import android.content.Context;
+
+import com.google.android.gms.gcm.GcmNetworkManager;
+import com.google.android.gms.gcm.GcmTaskService;
+import com.google.android.gms.gcm.TaskParams;
+
+import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
+import org.chromium.base.annotations.SuppressFBWarnings;
+import org.chromium.base.library_loader.LibraryProcessType;
+import org.chromium.base.library_loader.ProcessInitException;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsController;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsLauncher;
+import org.chromium.content.app.ContentApplication;
+import org.chromium.content.browser.BrowserStartupController;
+
+/**
+ * {@link ChromeBackgroundService} is scheduled through the {@link GcmNetworkManager} when the
+ * browser needs to be launched for scheduled tasks, or in response to changing network or power
+ * conditions.
+ */
+public class ChromeBackgroundService extends GcmTaskService {
+    private static final String TAG = "BackgroundService";
+
+    @Override
+    public int onRunTask(TaskParams params) {
+        Log.i(TAG, "Woken up at " + new java.util.Date().toString());
+        handleRunTask(params.getTag());
+        return GcmNetworkManager.RESULT_SUCCESS;
+    }
+
+    @VisibleForTesting
+    public void handleRunTask(final String tag) {
+        final Context context = this;
+        ThreadUtils.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                switch(tag) {
+                    case BackgroundSyncLauncher.TASK_TAG:
+                        handleBackgroundSyncEvent(context);
+                        break;
+
+                    case SnippetsLauncher.TASK_TAG:
+                        handleFetchSnippets(context);
+                        break;
+
+                    default:
+                        Log.i(TAG, "Unknown task tag " + tag);
+                        break;
+                }
+            }
+        });
+    }
+
+    private void handleBackgroundSyncEvent(Context context) {
+        if (!BackgroundSyncLauncher.hasInstance()) {
+            // Start the browser. The browser's BackgroundSyncManager (for the active profile) will
+            // start, check the network, and run any necessary sync events. This task runs with a
+            // wake lock, but has a three minute timeout, so we need to start the browser in its
+            // own task.
+            // TODO(jkarlin): Protect the browser sync event with a wake lock.
+            // See crbug.com/486020.
+            launchBrowser(context);
+        }
+    }
+
+    private void handleFetchSnippets(Context context) {
+        if (!SnippetsLauncher.hasInstance()) {
+            launchBrowser(context);
+        }
+        SnippetsController.get(context).fetchSnippets(true);
+    }
+
+    @VisibleForTesting
+    @SuppressFBWarnings("DM_EXIT")
+    protected void launchBrowser(Context context) {
+        Log.i(TAG, "Launching browser");
+        ContentApplication.initCommandLine(context);
+        try {
+            BrowserStartupController.get(context, LibraryProcessType.PROCESS_BROWSER)
+                    .startBrowserProcessesSync(false);
+        } catch (ProcessInitException e) {
+            Log.e(TAG, "ProcessInitException while starting the browser process");
+            // Since the library failed to initialize nothing in the application
+            // can work, so kill the whole application not just the activity.
+            System.exit(-1);
+        }
+    }
+
+    @Override
+    public void onInitializeTasks() {
+        BackgroundSyncLauncher.rescheduleTasksOnUpgrade(this);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java
index b1ab872..836d607c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java
@@ -8,6 +8,11 @@
 import android.app.Notification;
 import android.app.PendingIntent;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.drawable.Icon;
 import android.os.Build;
 
@@ -151,6 +156,9 @@
             throw new IllegalStateException(
                     "Cannot add more than " + MAX_AUTHOR_PROVIDED_ACTION_BUTTONS + " actions.");
         }
+        if (iconBitmap != null) {
+            applyWhiteOverlayToBitmap(iconBitmap);
+        }
         mActions.add(new Action(iconBitmap, limitLength(title), intent));
         return this;
     }
@@ -229,4 +237,16 @@
             builder.addAction(action.iconId, action.title, action.intent);
         }
     }
+
+    /**
+     * Paints {@code bitmap} white. This processing should be performed if the Android system
+     * expects a bitmap to be white, and the bitmap is not already known to be white. The bitmap
+     * must be mutable.
+     */
+    static void applyWhiteOverlayToBitmap(Bitmap bitmap) {
+        Paint paint = new Paint();
+        paint.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP));
+        Canvas canvas = new Canvas(bitmap);
+        canvas.drawBitmap(bitmap, 0, 0, paint);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java
index db0b5ad..64df7d0b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java
@@ -30,6 +30,7 @@
      * @param profile Profile of the user that we will retrieve snippets for.
      */
     public SnippetsBridge(Profile profile, final SnippetsObserver observer) {
+        mNativeSnippetsBridge = nativeInit(profile);
         SnippetsObserver wrappedObserver = new SnippetsObserver() {
             @Override
             public void onSnippetsAvailable(
@@ -40,7 +41,7 @@
                 }
             }
         };
-        mNativeSnippetsBridge = nativeInit(profile, wrappedObserver);
+        nativeSetObserver(mNativeSnippetsBridge, wrappedObserver);
     }
 
     void destroy() {
@@ -49,6 +50,7 @@
         mNativeSnippetsBridge = 0;
     }
 
-    private native long nativeInit(Profile profile, SnippetsObserver observer);
+    private native long nativeInit(Profile profile);
     private native void nativeDestroy(long nativeNTPSnippetsBridge);
+    private native void nativeSetObserver(long nativeNTPSnippetsBridge, SnippetsObserver observer);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java
index 55dd84cd..e11d187 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java
@@ -7,6 +7,7 @@
 import android.content.Context;
 
 import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.SigninManager;
 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver;
@@ -20,7 +21,10 @@
     private long mNativeSnippetsController;
 
     public SnippetsController(Context applicationContext) {
-        SigninManager.get(applicationContext).addSignInStateObserver(this);
+        // |applicationContext| can be null in tests.
+        if (applicationContext != null) {
+            SigninManager.get(applicationContext).addSignInStateObserver(this);
+        }
     }
 
     /**
@@ -55,5 +59,10 @@
     @Override
     public void onSignedOut() {}
 
+    @VisibleForTesting
+    public static void setInstanceForTesting(SnippetsController instance) {
+        sInstance = instance;
+    }
+
     private native void nativeFetchSnippets(Profile profile, boolean overwrite);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
new file mode 100644
index 0000000..18ad921
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
@@ -0,0 +1,132 @@
+// 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.
+
+package org.chromium.chrome.browser.ntp.snippets;
+
+import android.content.Context;
+
+import com.google.android.gms.gcm.GcmNetworkManager;
+import com.google.android.gms.gcm.PeriodicTask;
+import com.google.android.gms.gcm.Task;
+
+import org.chromium.base.Log;
+import org.chromium.base.VisibleForTesting;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.SuppressFBWarnings;
+import org.chromium.chrome.browser.ChromeBackgroundService;
+import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
+import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler;
+
+/**
+ * The {@link SnippetsLauncher} singleton is created and owned by the C++ browser.
+ *
+ * Thread model: This class is to be run on the UI thread only.
+ */
+public class SnippetsLauncher {
+    private static final String TAG = "SnippetsLauncher";
+
+    public static final String TASK_TAG = "FetchSnippets";
+
+    // The instance of SnippetsLauncher currently owned by a C++ SnippetsLauncherAndroid, if any.
+    // If it is non-null then the browser is running.
+    private static SnippetsLauncher sInstance;
+
+    private GcmNetworkManager mScheduler;
+
+    private boolean mGCMEnabled = true;
+
+    /**
+     * Create a SnippetsLauncher object, which is owned by C++.
+     * @param context The app context.
+     */
+    @VisibleForTesting
+    @CalledByNative
+    public static SnippetsLauncher create(Context context) {
+        if (sInstance != null) {
+            throw new IllegalStateException("Already instantiated");
+        }
+
+        sInstance = new SnippetsLauncher(context);
+        return sInstance;
+    }
+
+    /**
+     * Called when the C++ counterpart is deleted.
+     */
+    @VisibleForTesting
+    @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
+    @CalledByNative
+    public void destroy() {
+        assert sInstance == this;
+        sInstance = null;
+    }
+
+    /**
+     * Returns true if the native browser has started and created an instance of {@link
+     * SnippetsLauncher}.
+     */
+    public static boolean hasInstance() {
+        return sInstance != null;
+    }
+
+    protected SnippetsLauncher(Context context) {
+        checkGCM(context);
+        mScheduler = GcmNetworkManager.getInstance(context);
+    }
+
+    private boolean canUseGooglePlayServices(Context context) {
+        return ExternalAuthUtils.getInstance().canUseGooglePlayServices(
+                context, new UserRecoverableErrorHandler.Silent());
+    }
+
+    private void checkGCM(Context context) {
+        // Check to see if Play Services is up to date, and disable GCM if not.
+        if (!canUseGooglePlayServices(context)) {
+            mGCMEnabled = false;
+            Log.i(TAG, "Disabling SnippetsLauncher because Play Services is not up to date.");
+        }
+    }
+
+    @CalledByNative
+    private boolean schedule(int periodSeconds) {
+        if (!mGCMEnabled) return false;
+        Log.i(TAG, "Scheduling: " + periodSeconds);
+        // Google Play Services may not be up to date, if the application was not installed through
+        // the Play Store. In this case, scheduling the task will fail silently.
+        PeriodicTask task = new PeriodicTask.Builder()
+                                    .setService(ChromeBackgroundService.class)
+                                    .setTag(TASK_TAG)
+                                    .setPeriod(periodSeconds)
+                                    .setRequiredNetwork(Task.NETWORK_STATE_UNMETERED)
+                                    .setPersisted(true)
+                                    .setUpdateCurrent(true)
+                                    .build();
+        try {
+            mScheduler.schedule(task);
+        } catch (IllegalArgumentException e) {
+            // Disable GCM for the remainder of this session.
+            mGCMEnabled = false;
+            // Return false so that the failure will be logged.
+            return false;
+        }
+        return true;
+    }
+
+    @CalledByNative
+    private boolean unschedule() {
+        if (!mGCMEnabled) return false;
+        Log.i(TAG, "Unscheduling");
+        try {
+            mScheduler.cancelTask("SnippetsLauncher", ChromeBackgroundService.class);
+        } catch (IllegalArgumentException e) {
+            // This occurs when SnippetsLauncherService is not found in the application
+            // manifest. Disable GCM for the remainder of this session.
+            mGCMEnabled = false;
+            // Return false so that the failure will be logged.
+            return false;
+        }
+        return true;
+    }
+}
+
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java
deleted file mode 100644
index e626c257..0000000
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java
+++ /dev/null
@@ -1,76 +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.
-
-package org.chromium.chrome.browser;
-
-import android.content.Context;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.test.util.AdvancedMockContext;
-import org.chromium.base.test.util.Feature;
-
-/**
- * Tests {@link BackgroundSyncLauncherService}.
- */
-public class BackgroundSyncLauncherServiceTest extends InstrumentationTestCase {
-    private Context mContext;
-    private BackgroundSyncLauncher mLauncher;
-    private MockLauncherService mLauncherService;
-
-    static class MockLauncherService extends BackgroundSyncLauncherService {
-        private boolean mDidStartService = false;
-
-        @Override
-        protected void launchBrowser(Context context) {
-            mDidStartService = true;
-        }
-
-        // Posts an assertion task to the UI thread. Since this is only called after the call
-        // to onRunTask, it will be enqueued after any possible call to launchBrowser, and we
-        // can reliably check whether launchBrowser was called.
-        protected void checkExpectations(final boolean expectedStartService) {
-            ThreadUtils.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    assertEquals("StartedService", expectedStartService, mDidStartService);
-                }
-            });
-        }
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        mContext = new AdvancedMockContext(getInstrumentation().getTargetContext());
-        BackgroundSyncLauncher.setGCMEnabled(false);
-        RecordHistogram.disableForTests();
-        mLauncher = BackgroundSyncLauncher.create(mContext);
-        mLauncherService = new MockLauncherService();
-    }
-
-    private void deleteLauncherInstance() {
-        mLauncher.destroy();
-        mLauncher = null;
-    }
-
-    private void startOnRunTaskAndVerify(boolean shouldStart) {
-        mLauncherService.onRunTask(null);
-        mLauncherService.checkExpectations(shouldStart);
-    }
-
-    @SmallTest
-    @Feature({"BackgroundSync"})
-    public void testNoFireWhenInstanceExists() {
-        startOnRunTaskAndVerify(false);
-    }
-
-    @SmallTest
-    @Feature({"BackgroundSync"})
-    public void testFiresWhenInstanceDoesNotExist() {
-        deleteLauncherInstance();
-        startOnRunTaskAndVerify(true);
-    }
-}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeBackgroundServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeBackgroundServiceTest.java
new file mode 100644
index 0000000..fb25f1f
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ChromeBackgroundServiceTest.java
@@ -0,0 +1,125 @@
+// 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.
+
+package org.chromium.chrome.browser;
+
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.base.test.util.AdvancedMockContext;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsController;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsLauncher;
+
+/**
+ * Tests {@link ChromeBackgroundService}.
+ */
+public class ChromeBackgroundServiceTest extends InstrumentationTestCase {
+    private Context mContext;
+    private BackgroundSyncLauncher mSyncLauncher;
+    private SnippetsLauncher mSnippetsLauncher;
+    private MockSnippetsController mSnippetsController;
+    private MockTaskService mTaskService;
+
+    static class MockTaskService extends ChromeBackgroundService {
+        private boolean mDidLaunchBrowser = false;
+
+        @Override
+        protected void launchBrowser(Context context) {
+            mDidLaunchBrowser = true;
+        }
+
+        // Posts an assertion task to the UI thread. Since this is only called after the call
+        // to onRunTask, it will be enqueued after any possible call to launchBrowser, and we
+        // can reliably check whether launchBrowser was called.
+        protected void checkExpectations(final boolean expectedLaunchBrowser) {
+            ThreadUtils.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    assertEquals("StartedService", expectedLaunchBrowser, mDidLaunchBrowser);
+                }
+            });
+        }
+    }
+
+    static class MockSnippetsController extends SnippetsController {
+        private boolean mDidFetchSnippets = false;
+
+        MockSnippetsController() {
+            super(null);
+        }
+
+        @Override
+        public void fetchSnippets(boolean overwrite) {
+            mDidFetchSnippets = true;
+        }
+
+        protected void checkExpectations(final boolean expectedFetchSnippets) {
+            ThreadUtils.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    assertEquals("FetchedSnippets", expectedFetchSnippets, mDidFetchSnippets);
+                }
+            });
+        }
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        mContext = new AdvancedMockContext(getInstrumentation().getTargetContext());
+        BackgroundSyncLauncher.setGCMEnabled(false);
+        RecordHistogram.disableForTests();
+        mSyncLauncher = BackgroundSyncLauncher.create(mContext);
+        mSnippetsLauncher = SnippetsLauncher.create(mContext);
+        mSnippetsController = new MockSnippetsController();
+        SnippetsController.setInstanceForTesting(mSnippetsController);
+        mTaskService = new MockTaskService();
+    }
+
+    private void deleteSyncLauncherInstance() {
+        mSyncLauncher.destroy();
+        mSyncLauncher = null;
+    }
+
+    private void deleteSnippetsLauncherInstance() {
+        mSnippetsLauncher.destroy();
+        mSnippetsLauncher = null;
+    }
+
+    private void startOnRunTaskAndVerify(String taskTag, boolean shouldStart,
+            boolean shouldFetchSnippets) {
+        mTaskService.handleRunTask(taskTag);
+        mTaskService.checkExpectations(shouldStart);
+        mSnippetsController.checkExpectations(shouldFetchSnippets);
+    }
+
+    @SmallTest
+    @Feature({"BackgroundSync"})
+    public void testBackgroundSyncNoLaunchBrowserWhenInstanceExists() {
+        startOnRunTaskAndVerify(BackgroundSyncLauncher.TASK_TAG, false, false);
+    }
+
+    @SmallTest
+    @Feature({"BackgroundSync"})
+    public void testBackgroundSyncLaunchBrowserWhenInstanceDoesNotExist() {
+        deleteSyncLauncherInstance();
+        startOnRunTaskAndVerify(BackgroundSyncLauncher.TASK_TAG, true, false);
+    }
+
+    @SmallTest
+    @Feature({"NTPSnippets"})
+    public void testNTPSnippetsNoLaunchBrowserWhenInstanceExists() {
+        startOnRunTaskAndVerify(SnippetsLauncher.TASK_TAG, false, true);
+    }
+
+    @SmallTest
+    @Feature({"NTPSnippets"})
+    public void testNTPSnippetsLaunchBrowserWhenInstanceDoesNotExist() {
+        deleteSnippetsLauncherInstance();
+        startOnRunTaskAndVerify(SnippetsLauncher.TASK_TAG, true, true);
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/PowerBroadcastReceiverTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/PowerBroadcastReceiverTest.java
index 6833f0d..6102b17 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/PowerBroadcastReceiverTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/PowerBroadcastReceiverTest.java
@@ -140,6 +140,7 @@
      */
     @MediumTest
     @Feature({"Omaha", "Sync"})
+    @FlakyTest  // https://crbug.com/587138
     public void testRunnableGetsRunWhenScreenIsOn() throws Exception {
         // Claim the screen is off.
         mReceiver.setPowerManagerHelperForTests(sScreenOff);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/CustomNotificationBuilderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/CustomNotificationBuilderTest.java
index 52319d3..d4a85a57 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/CustomNotificationBuilderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/CustomNotificationBuilderTest.java
@@ -11,6 +11,7 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.DisplayMetrics;
@@ -42,9 +43,11 @@
 
         Bitmap largeIcon = Bitmap.createBitmap(
                 new int[] {Color.RED}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        largeIcon = largeIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
 
         Bitmap actionIcon = Bitmap.createBitmap(
                 new int[] {Color.WHITE}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        actionIcon = actionIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
 
         Notification notification =
                 new CustomNotificationBuilder(context)
@@ -134,6 +137,37 @@
 
     @SmallTest
     @Feature({"Browser", "Notifications"})
+    public void testPaintIcons() {
+        Context context = getInstrumentation().getTargetContext();
+
+        Bitmap largeIcon = Bitmap.createBitmap(
+                new int[] {Color.RED}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        largeIcon = largeIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
+
+        Bitmap actionIcon = Bitmap.createBitmap(
+                new int[] {Color.RED}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        actionIcon = actionIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
+
+        Notification notification =
+                new CustomNotificationBuilder(context)
+                        .setLargeIcon(largeIcon)
+                        .addAction(actionIcon, "button", createIntent(context, "ActionButton"))
+                        .build();
+
+        // The large icon should not be painted white.
+        assertNotNull(notification.largeIcon);
+        assertEquals(Color.RED, notification.largeIcon.getPixel(0, 0));
+
+        // Action icons should be painted white.
+        assertEquals(1, notification.actions.length);
+        View bigView = notification.bigContentView.apply(context, new LinearLayout(context));
+        ImageView actionIconView = (ImageView) bigView.findViewById(R.id.button_icon);
+        Bitmap actionIconBitmap = ((BitmapDrawable) actionIconView.getDrawable()).getBitmap();
+        assertEquals(Color.WHITE, actionIconBitmap.getPixel(0, 0));
+    }
+
+    @SmallTest
+    @Feature({"Browser", "Notifications"})
     public void testCharSequenceLimits() {
         Context context = getInstrumentation().getTargetContext();
         int maxLength = CustomNotificationBuilder.MAX_CHARSEQUENCE_LENGTH;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilderTest.java
index f550a64..36e34e9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilderTest.java
@@ -40,9 +40,11 @@
 
         Bitmap largeIcon = Bitmap.createBitmap(
                 new int[] {Color.RED}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        largeIcon = largeIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
 
         Bitmap actionIcon = Bitmap.createBitmap(
                 new int[] {Color.GRAY}, 1 /* width */, 1 /* height */, Bitmap.Config.ARGB_8888);
+        actionIcon = actionIcon.copy(Bitmap.Config.ARGB_8888, true /* isMutable */);
 
         Notification notification =
                 new StandardNotificationBuilder(context)
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index e0d7556..fdc84b3 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -8339,9 +8339,15 @@
             Print using system dialog... <ph name="SHORTCUT_KEY">$1<ex>(Shift+Ctrl+P)</ex></ph>
           </message>
         </if>
-        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION" desc="Instruction shown when the user enters an invalid page range.">
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_SYNTAX_INSTRUCTION" desc="Instruction shown when the user enters an invalid page range.">
           Invalid page range, use <ph name="EXAMPLE_PAGE_RANGE">$1<ex>e.g. 1-5, 8, 11-13</ex></ph>
         </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_LIMIT_INSTRUCTION" desc="Instruction shown when the user enters an excessive page range.">
+          Out of bounds page reference
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_LIMIT_INSTRUCTION_WITH_VALUE" desc="Instruction shown when the user enters an excessive page number, and the maximum page.">
+          Out of bounds page reference, limit is <ph name="MAXIMUM_PAGE">$1<ex>1</ex></ph>
+        </message>
         <message name="IDS_PRINT_PREVIEW_COPIES_INSTRUCTION" desc="Instruction shown when the user enters an invalid number of copies.">
           Use a number to indicate how many copies to print (1 or more).
         </message>
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc
index 8aca352..ddf0b94 100644
--- a/chrome/browser/android/chrome_jni_registrar.cc
+++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -62,6 +62,7 @@
 #include "chrome/browser/android/new_tab_page_prefs.h"
 #include "chrome/browser/android/ntp_snippets_bridge.h"
 #include "chrome/browser/android/ntp_snippets_controller.h"
+#include "chrome/browser/android/ntp_snippets_launcher.h"
 #include "chrome/browser/android/offline_pages/offline_page_bridge.h"
 #include "chrome/browser/android/omnibox/answers_image_bridge.h"
 #include "chrome/browser/android/omnibox/autocomplete_controller_android.h"
@@ -310,6 +311,7 @@
      NotificationUIManagerAndroid::RegisterNotificationUIManager},
     {"NTPSnippetsBridge", NTPSnippetsBridge::Register},
     {"NTPSnippetsController", NTPSnippetsController::Register},
+    {"NTPSnippetsLauncher", NTPSnippetsLauncher::Register},
     {"OAuth2TokenServiceDelegateAndroid",
      OAuth2TokenServiceDelegateAndroid::Register},
     {"OfflinePageBridge", offline_pages::android::RegisterOfflinePageBridge},
diff --git a/chrome/browser/android/ntp_snippets_bridge.cc b/chrome/browser/android/ntp_snippets_bridge.cc
index 1613ae42..cbb55c8 100644
--- a/chrome/browser/android/ntp_snippets_bridge.cc
+++ b/chrome/browser/android/ntp_snippets_bridge.cc
@@ -23,22 +23,24 @@
 
 static jlong Init(JNIEnv* env,
                   const JavaParamRef<jobject>& obj,
-                  const JavaParamRef<jobject>& j_profile,
-                  const JavaParamRef<jobject>& j_observer) {
-  NTPSnippetsBridge* snippets_bridge =
-      new NTPSnippetsBridge(env, j_profile, j_observer);
+                  const JavaParamRef<jobject>& j_profile) {
+  NTPSnippetsBridge* snippets_bridge = new NTPSnippetsBridge(env, j_profile);
   return reinterpret_cast<intptr_t>(snippets_bridge);
 }
 
 NTPSnippetsBridge::NTPSnippetsBridge(JNIEnv* env,
-                                     jobject j_profile,
-                                     jobject j_observer)
+                                     const JavaParamRef<jobject>& j_profile)
     : snippet_service_observer_(this) {
-  observer_.Reset(env, j_observer);
-
   Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile);
   ntp_snippets_service_ = NTPSnippetsServiceFactory::GetForProfile(profile);
   snippet_service_observer_.Add(ntp_snippets_service_);
+}
+
+void NTPSnippetsBridge::SetObserver(JNIEnv* env,
+                                    const JavaParamRef<jobject>& obj,
+                                    const JavaParamRef<jobject>& j_observer) {
+  observer_.Reset(env, j_observer);
+
   if (ntp_snippets_service_->is_loaded())
     NTPSnippetsServiceLoaded(ntp_snippets_service_);
 }
diff --git a/chrome/browser/android/ntp_snippets_bridge.h b/chrome/browser/android/ntp_snippets_bridge.h
index 727cd27..97ed187b 100644
--- a/chrome/browser/android/ntp_snippets_bridge.h
+++ b/chrome/browser/android/ntp_snippets_bridge.h
@@ -15,11 +15,14 @@
 // the list of snippets to show on the NTP
 class NTPSnippetsBridge : public ntp_snippets::NTPSnippetsServiceObserver {
  public:
-  explicit NTPSnippetsBridge(JNIEnv* env,
-                             jobject j_profile,
-                             jobject j_observer);
+  NTPSnippetsBridge(JNIEnv* env,
+                    const base::android::JavaParamRef<jobject>& j_profile);
   void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
 
+  void SetObserver(JNIEnv* env,
+                   const base::android::JavaParamRef<jobject>& obj,
+                   const base::android::JavaParamRef<jobject>& j_observer);
+
   static bool Register(JNIEnv* env);
 
  private:
diff --git a/chrome/browser/android/ntp_snippets_launcher.cc b/chrome/browser/android/ntp_snippets_launcher.cc
new file mode 100644
index 0000000..3b05465
--- /dev/null
+++ b/chrome/browser/android/ntp_snippets_launcher.cc
@@ -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.
+
+#include "chrome/browser/android/ntp_snippets_launcher.h"
+
+#include "base/android/context_utils.h"
+#include "content/public/browser/browser_thread.h"
+#include "jni/SnippetsLauncher_jni.h"
+
+using content::BrowserThread;
+
+namespace {
+
+base::LazyInstance<NTPSnippetsLauncher> g_snippets_launcher =
+    LAZY_INSTANCE_INITIALIZER;
+
+}  // namespace
+
+// static
+NTPSnippetsLauncher* NTPSnippetsLauncher::Get() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  return g_snippets_launcher.Pointer();
+}
+
+// static
+bool NTPSnippetsLauncher::Register(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+bool NTPSnippetsLauncher::Schedule(int period_seconds) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  return Java_SnippetsLauncher_schedule(
+      env, java_launcher_.obj(), period_seconds);
+}
+
+bool NTPSnippetsLauncher::Unschedule() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  return Java_SnippetsLauncher_unschedule(env, java_launcher_.obj());
+}
+
+NTPSnippetsLauncher::NTPSnippetsLauncher() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  java_launcher_.Reset(Java_SnippetsLauncher_create(
+      env, base::android::GetApplicationContext()));
+}
+
+NTPSnippetsLauncher::~NTPSnippetsLauncher() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  Java_SnippetsLauncher_destroy(env, java_launcher_.obj());
+  java_launcher_.Reset();
+}
diff --git a/chrome/browser/android/ntp_snippets_launcher.h b/chrome/browser/android/ntp_snippets_launcher.h
new file mode 100644
index 0000000..c2f4ef6
--- /dev/null
+++ b/chrome/browser/android/ntp_snippets_launcher.h
@@ -0,0 +1,38 @@
+// 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_ANDROID_NTP_SNIPPETS_LAUNCHER_H_
+#define CHROME_BROWSER_ANDROID_NTP_SNIPPETS_LAUNCHER_H_
+
+#include "base/android/jni_android.h"
+#include "base/lazy_instance.h"
+#include "base/macros.h"
+#include "components/ntp_snippets/ntp_snippets_scheduler.h"
+
+// Android implementation of ntp_snippets::NTPSnippetsScheduler.
+// The NTPSnippetsLauncher singleton owns the Java SnippetsLauncher object, and
+// is used to schedule the fetching of snippets. Runs on the UI thread.
+class NTPSnippetsLauncher : public ntp_snippets::NTPSnippetsScheduler {
+ public:
+  static NTPSnippetsLauncher* Get();
+
+  static bool Register(JNIEnv* env);
+
+  // ntp_snippets::NTPSnippetsScheduler implementation.
+  bool Schedule(int period_seconds) override;
+  bool Unschedule() override;
+
+ private:
+  friend struct base::DefaultLazyInstanceTraits<NTPSnippetsLauncher>;
+
+  // Constructor and destructor marked private to enforce singleton.
+  NTPSnippetsLauncher();
+  virtual ~NTPSnippetsLauncher();
+
+  base::android::ScopedJavaGlobalRef<jobject> java_launcher_;
+
+  DISALLOW_COPY_AND_ASSIGN(NTPSnippetsLauncher);
+};
+
+#endif  // CHROME_BROWSER_ANDROID_NTP_SNIPPETS_LAUNCHER_H_
diff --git a/chrome/browser/chromeos/login/easy_unlock/bootstrap_browsertest.cc b/chrome/browser/chromeos/login/easy_unlock/bootstrap_browsertest.cc
index bc5a9b1c..73d194d 100644
--- a/chrome/browser/chromeos/login/easy_unlock/bootstrap_browsertest.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/bootstrap_browsertest.cc
@@ -28,7 +28,7 @@
 namespace {
 
 const char kFakeGaiaId[] = "123456";
-const char kFakeUser[] = "test_user@example.com";
+const char kFakeUser[] = "test_user@consumer.example.com";
 const char kFakeSid[] = "fake-sid";
 const char kFakeLsid[] = "fake-lsid";
 const char kFakeRefreshToken[] = "fake-refresh-token";
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
index 0e96325..c98c8064 100644
--- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc
+++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -317,6 +317,8 @@
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitch(switches::kOobeSkipPostLogin);
+    command_line->AppendSwitch(
+        chromeos::switches::kAllowFailedPolicyFetchForTest);
 
     const GURL gaia_url = gaia_https_forwarder_.GetURLForSSLHost("");
     const GURL saml_idp_url = saml_https_forwarder_.GetURLForSSLHost("SAML");
diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc
index a08a650..44a3bd79 100644
--- a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc
+++ b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -44,6 +45,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chromeos/chromeos_paths.h"
+#include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/cryptohome_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_session_manager_client.h"
@@ -117,6 +119,16 @@
     ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir_));
   }
 
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    LoginManagerTest::SetUpCommandLine(command_line);
+    // These tests create new users and then inject policy after the fact,
+    // to avoid having to set up a mock policy server. UserCloudPolicyManager
+    // will shut down the profile if there's an error loading the initial
+    // policy, so disable this behavior so we can inject policy directly.
+    command_line->AppendSwitch(
+        chromeos::switches::kAllowFailedPolicyFetchForTest);
+  }
+
   void SetUpOnMainThread() override {
     LoginManagerTest::SetUpOnMainThread();
     local_state_ = g_browser_process->local_state();
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_policy_browsertest.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_policy_browsertest.cc
index 52e43cf..9e6c82e2 100644
--- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_policy_browsertest.cc
+++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_policy_browsertest.cc
@@ -184,6 +184,10 @@
     command_line->AppendSwitch(switches::kLoginManager);
     command_line->AppendSwitch(switches::kForceLoginManagerInTests);
 
+    // Allow policy fetches to fail - these tests instead invoke InjectPolicy()
+    // to directly inject and modify policy dynamically.
+    command_line->AppendSwitch(switches::kAllowFailedPolicyFetchForTest);
+
     LoginManagerTest::SetUpCommandLine(command_line);
   }
 
diff --git a/chrome/browser/chromeos/policy/affiliation_test_helper.cc b/chrome/browser/chromeos/policy/affiliation_test_helper.cc
index 9a309867..acdba14 100644
--- a/chrome/browser/chromeos/policy/affiliation_test_helper.cc
+++ b/chrome/browser/chromeos/policy/affiliation_test_helper.cc
@@ -133,6 +133,11 @@
 void AppendCommandLineSwitchesForLoginManager(base::CommandLine* command_line) {
   command_line->AppendSwitch(chromeos::switches::kLoginManager);
   command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
+  // LoginManager tests typically don't stand up a policy test server but
+  // instead inject policies directly through a SessionManagerClient. So allow
+  // policy fetches to fail - this is expected.
+  command_line->AppendSwitch(
+      chromeos::switches::kAllowFailedPolicyFetchForTest);
 }
 
 }  // namespace affiliation_test_helper
diff --git a/chrome/browser/chromeos/policy/blocking_login_browsertest.cc b/chrome/browser/chromeos/policy/blocking_login_browsertest.cc
index a57f3ac..651a9264 100644
--- a/chrome/browser/chromeos/policy/blocking_login_browsertest.cc
+++ b/chrome/browser/chromeos/policy/blocking_login_browsertest.cc
@@ -81,6 +81,11 @@
   const bool enroll_device;
 };
 
+// TODO(atwilson): This test is completely broken - it originally was built
+// when we made an entirely different set of network calls on startup. As a
+// result it generates random failures in startup network requests, then waits
+// to see if the profile finishes loading which is not at all what it is
+// intended to test. We need to fix this test or remove it (crbug.com/580537).
 class BlockingLoginTest
     : public OobeBaseTest,
       public content::NotificationObserver,
@@ -95,6 +100,9 @@
     command_line->AppendSwitchASCII(
         policy::switches::kDeviceManagementUrl,
         embedded_test_server()->GetURL("/device_management").spec());
+
+    command_line->AppendSwitch(
+        chromeos::switches::kAllowFailedPolicyFetchForTest);
   }
 
   void SetUpOnMainThread() override {
diff --git a/chrome/browser/chromeos/policy/login_policy_test_base.h b/chrome/browser/chromeos/policy/login_policy_test_base.h
index 4c444414..76d836e 100644
--- a/chrome/browser/chromeos/policy/login_policy_test_base.h
+++ b/chrome/browser/chromeos/policy/login_policy_test_base.h
@@ -34,6 +34,10 @@
   virtual void GetMandatoryPoliciesValue(base::DictionaryValue* policy) const;
   virtual void GetRecommendedPoliciesValue(base::DictionaryValue* policy) const;
 
+  UserPolicyTestHelper* user_policy_helper() {
+    return user_policy_helper_.get();
+  }
+
   void SkipToLoginScreen();
   void LogIn(const std::string& user_id, const std::string& password);
 
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
index 7e3610c..8fa1b39 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/sparse_histogram.h"
@@ -24,6 +25,7 @@
 #include "chrome/browser/chromeos/policy/wildcard_login_checker.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/common/chrome_content_client.h"
+#include "chromeos/chromeos_switches.h"
 #include "components/policy/core/common/cloud/cloud_external_data_manager.h"
 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
@@ -31,6 +33,7 @@
 #include "components/policy/core/common/policy_map.h"
 #include "components/policy/core/common/policy_pref_names.h"
 #include "components/policy/core/common/policy_types.h"
+#include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "policy/policy_constants.h"
@@ -99,7 +102,15 @@
       wait_for_policy_fetch_(wait_for_policy_fetch),
       policy_fetch_timeout_(false, false) {
   time_init_started_ = base::Time::Now();
-  if (wait_for_policy_fetch_ && !initial_policy_fetch_timeout.is_max()) {
+
+  // Caller should pass a non-zero policy_fetch_timeout iff
+  // |wait_for_policy_fetch| is true.
+  DCHECK_NE(wait_for_policy_fetch_, initial_policy_fetch_timeout.is_zero());
+  allow_failed_policy_fetches_ =
+      base::CommandLine::ForCurrentProcess()->HasSwitch(
+          chromeos::switches::kAllowFailedPolicyFetchForTest) ||
+      !initial_policy_fetch_timeout.is_max();
+  if (wait_for_policy_fetch_ && allow_failed_policy_fetches_) {
     policy_fetch_timeout_.Start(
         FROM_HERE,
         initial_policy_fetch_timeout,
@@ -260,7 +271,7 @@
     } else {
       // If the client has switched to not registered, we bail out as this
       // indicates the cloud policy setup flow has been aborted.
-      CancelWaitForPolicyFetch();
+      CancelWaitForPolicyFetch(true);
     }
   }
 }
@@ -272,7 +283,18 @@
     UMA_HISTOGRAM_SPARSE_SLOWLY(kUMAInitialFetchClientError,
                                 cloud_policy_client->status());
   }
-  CancelWaitForPolicyFetch();
+  switch (client()->status()) {
+    case DM_STATUS_SUCCESS:
+    case DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED:
+      // If management is not supported for this user, then a registration
+      // error is to be expected.
+      CancelWaitForPolicyFetch(true);
+      break;
+    default:
+      // Unexpected error fetching policy.
+      CancelWaitForPolicyFetch(false);
+      break;
+  }
 }
 
 void UserCloudPolicyManagerChromeOS::OnComponentCloudPolicyUpdated() {
@@ -354,9 +376,6 @@
                        policy_token, std::string(), std::string(),
                        std::string());
   } else {
-    // Failed to get a token, stop waiting and use an empty policy.
-    CancelWaitForPolicyFetch();
-
     UMA_HISTOGRAM_ENUMERATION(kUMAInitialFetchOAuth2Error,
                               error.state(),
                               GoogleServiceAuthError::NUM_STATES);
@@ -366,6 +385,9 @@
       UMA_HISTOGRAM_SPARSE_SLOWLY(kUMAInitialFetchOAuth2NetworkError,
                                   -error.network_error());
     }
+    // Failed to get a token, stop waiting if policy is not required for this
+    // user.
+    CancelWaitForPolicyFetch(false);
   }
 
   token_fetcher_.reset();
@@ -378,23 +400,38 @@
                              now - time_client_registered_);
   UMA_HISTOGRAM_MEDIUM_TIMES(kUMAInitialFetchDelayTotal,
                              now - time_init_started_);
-  CancelWaitForPolicyFetch();
+  CancelWaitForPolicyFetch(success);
 }
 
 void UserCloudPolicyManagerChromeOS::OnBlockingFetchTimeout() {
   if (!wait_for_policy_fetch_)
     return;
-  LOG(WARNING) << "Timed out while waiting for the initial policy fetch. "
-               << "The first session will start without policy.";
-  CancelWaitForPolicyFetch();
+  LOG(WARNING) << "Timed out while waiting for the policy fetch. "
+               << "The session will start with the cached policy.";
+  CancelWaitForPolicyFetch(false);
 }
 
-void UserCloudPolicyManagerChromeOS::CancelWaitForPolicyFetch() {
+void UserCloudPolicyManagerChromeOS::CancelWaitForPolicyFetch(bool success) {
   if (!wait_for_policy_fetch_)
     return;
 
-  wait_for_policy_fetch_ = false;
   policy_fetch_timeout_.Stop();
+
+  // If there was an error, and we don't want to allow profile initialization
+  // to go forward after a failed policy fetch, then just return (profile
+  // initialization will not complete).
+  // TODO(atwilson): Add code to retry policy fetching.
+  if (!success && !allow_failed_policy_fetches_) {
+    LOG(ERROR) << "Policy fetch failed for "
+               << user_manager::UserManager::Get()->GetActiveUser()->email()
+               << " - aborting profile initialization";
+    // Need to exit the current user, because we've already started this user's
+    // session.
+    chrome::AttemptUserExit();
+    return;
+  }
+
+  wait_for_policy_fetch_ = false;
   CheckAndPublishPolicy();
   // Now that |wait_for_policy_fetch_| is guaranteed to be false, the scheduler
   // can be started.
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
index a0eb497..c19588d 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
@@ -132,8 +132,10 @@
 
   // Cancels waiting for the policy fetch and flags the
   // ConfigurationPolicyProvider ready (assuming all other initialization tasks
-  // have completed).
-  void CancelWaitForPolicyFetch();
+  // have completed). Pass |true| if policy fetch was successful (either
+  // because policy was successfully fetched, or if DMServer has notified us
+  // that the user is not managed).
+  void CancelWaitForPolicyFetch(bool success);
 
   void StartRefreshSchedulerIfReady();
 
@@ -153,6 +155,11 @@
   // IsInitializationComplete().
   bool wait_for_policy_fetch_;
 
+  // Whether we should allow policy fetches to fail, or wait forever until they
+  // succeed (typically we won't allow them to fail until we have loaded policy
+  // at least once).
+  bool allow_failed_policy_fetches_;
+
   // A timer that puts a hard limit on the maximum time to wait for the initial
   // policy fetch.
   base::Timer policy_fetch_timeout_;
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_browsertest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_browsertest.cc
index 6ae59a61..f8d91e76 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_browsertest.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_browsertest.cc
@@ -7,14 +7,54 @@
 
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
 #include "base/values.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
 #include "chrome/browser/chromeos/policy/login_policy_test_base.h"
+#include "chrome/browser/chromeos/policy/user_policy_test_helper.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/host_desktop.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "components/user_manager/user.h"
+#include "components/user_manager/user_manager.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/notification_service.h"
 #include "policy/policy_constants.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+// Helper class that counts the number of notifications of the specified
+// type that have been received.
+class CountNotificationObserver : public content::NotificationObserver {
+ public:
+  CountNotificationObserver(int notification_type_to_count,
+                            const content::NotificationSource& source)
+      : notification_count_(0) {
+    registrar_.Add(this, notification_type_to_count, source);
+  }
+
+  // NotificationObserver:
+  void Observe(int type,
+               const content::NotificationSource& source,
+               const content::NotificationDetails& details) override {
+    // Count the number of notifications seen.
+    notification_count_++;
+  }
+
+  int notification_count() const { return notification_count_; }
+
+ private:
+  int notification_count_;
+  content::NotificationRegistrar registrar_;
+
+  DISALLOW_COPY_AND_ASSIGN(CountNotificationObserver);
+};
+
+}  // namespace
 
 namespace policy {
 
@@ -42,6 +82,12 @@
   SkipToLoginScreen();
   LogIn(kAccountId, kAccountPassword);
 
+  // User should be marked as having a valid OAuth token.
+  const user_manager::UserManager* const user_manager =
+      user_manager::UserManager::Get();
+  EXPECT_EQ(user_manager::User::OAUTH2_TOKEN_STATUS_VALID,
+            user_manager->GetActiveUser()->oauth_token_status());
+
   // Check that the startup pages specified in policy were opened.
   BrowserList* browser_list = BrowserList::GetInstance();
   EXPECT_EQ(1U, browser_list->size());
@@ -58,4 +104,24 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_F(UserCloudPolicyManagerTest, ErrorLoadingPolicy) {
+  // Delete the policy file - this will cause a 500 error on policy requests.
+  user_policy_helper()->DeletePolicyFile();
+  SkipToLoginScreen();
+  CountNotificationObserver observer(
+      chrome::NOTIFICATION_SESSION_STARTED,
+      content::NotificationService::AllSources());
+  GetLoginDisplay()->ShowSigninScreenForCreds(kAccountId, kAccountPassword);
+  base::RunLoop().Run();
+  // Should not receive a SESSION_STARTED notification.
+  ASSERT_EQ(0, observer.notification_count());
+
+  // User should not be marked as having a valid OAuth token. That way, if we
+  // try to load the user in the future, we will attempt to load policy again.
+  const user_manager::UserManager* user_manager =
+      user_manager::UserManager::Get();
+  EXPECT_NE(user_manager::User::OAUTH2_TOKEN_STATUS_VALID,
+            user_manager->GetActiveUser()->oauth_token_status());
+}
+
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.cc
index 3fad89c..7695acf 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.cc
@@ -149,16 +149,35 @@
       g_browser_process->platform_part()->browser_policy_connector_chromeos();
   const bool is_browser_restart =
       command_line->HasSwitch(chromeos::switches::kLoginUser);
-  const bool wait_for_initial_policy = !is_browser_restart;
+  const user_manager::UserManager* const user_manager =
+      user_manager::UserManager::Get();
 
-  const base::TimeDelta initial_policy_fetch_timeout =
-      user_manager::UserManager::Get()->IsCurrentUserNew()
-          ? base::TimeDelta::Max()
-          : base::TimeDelta::FromSeconds(kInitialPolicyFetchTimeoutSeconds);
+  // We want to block for policy in a few situations: if the user is new, or
+  // if we are forcing an online signin. An online signin will be forced if
+  // there has been a credential error, or if the initial session creation
+  // was not completed (the oauth_token_status is not set to valid by
+  // OAuth2LoginManager until profile creation/session restore is complete).
+  const bool block_forever_for_policy =
+      !user_manager->IsLoggedInAsStub() &&
+      (user_manager->IsCurrentUserNew() ||
+       user_manager->GetActiveUser()->force_online_signin() ||
+       user_manager->GetActiveUser()->oauth_token_status() !=
+           user_manager::User::OAUTH2_TOKEN_STATUS_VALID);
+
+  const bool wait_for_policy_fetch =
+      block_forever_for_policy || !is_browser_restart;
+
+  base::TimeDelta initial_policy_fetch_timeout;
+  if (block_forever_for_policy) {
+    initial_policy_fetch_timeout = base::TimeDelta::Max();
+  } else if (wait_for_policy_fetch) {
+    initial_policy_fetch_timeout =
+        base::TimeDelta::FromSeconds(kInitialPolicyFetchTimeoutSeconds);
+  }
 
   DeviceManagementService* device_management_service =
       connector->device_management_service();
-  if (wait_for_initial_policy)
+  if (wait_for_policy_fetch)
     device_management_service->ScheduleInitialization(0);
 
   base::FilePath profile_dir = profile->GetPath();
@@ -201,7 +220,7 @@
   scoped_ptr<UserCloudPolicyManagerChromeOS> manager(
       new UserCloudPolicyManagerChromeOS(
           std::move(store), std::move(external_data_manager),
-          component_policy_cache_dir, wait_for_initial_policy,
+          component_policy_cache_dir, wait_for_policy_fetch,
           initial_policy_fetch_timeout, base::ThreadTaskRunnerHandle::Get(),
           file_task_runner, io_task_runner));
 
diff --git a/chrome/browser/chromeos/policy/user_policy_test_helper.cc b/chrome/browser/chromeos/policy/user_policy_test_helper.cc
index b439621e..5f6d28f 100644
--- a/chrome/browser/chromeos/policy/user_policy_test_helper.cc
+++ b/chrome/browser/chromeos/policy/user_policy_test_helper.cc
@@ -128,6 +128,10 @@
   run_loop.Run();
 }
 
+void UserPolicyTestHelper::DeletePolicyFile() {
+  base::DeleteFile(PolicyFilePath(), false);
+}
+
 void UserPolicyTestHelper::WritePolicyFile(
     const base::DictionaryValue& mandatory,
     const base::DictionaryValue& recommended) {
diff --git a/chrome/browser/chromeos/policy/user_policy_test_helper.h b/chrome/browser/chromeos/policy/user_policy_test_helper.h
index 941a067..a59fc910 100644
--- a/chrome/browser/chromeos/policy/user_policy_test_helper.h
+++ b/chrome/browser/chromeos/policy/user_policy_test_helper.h
@@ -49,6 +49,8 @@
                     const base::DictionaryValue& recommended_policy,
                     Profile* profile);
 
+  void DeletePolicyFile();
+
  private:
   void WritePolicyFile(const base::DictionaryValue& mandatory,
                        const base::DictionaryValue& recommended);
diff --git a/chrome/browser/mac/nsprocessinfo_additions.h b/chrome/browser/mac/nsprocessinfo_additions.h
new file mode 100644
index 0000000..886d8e9
--- /dev/null
+++ b/chrome/browser/mac/nsprocessinfo_additions.h
@@ -0,0 +1,21 @@
+// 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_MAC_NSPROCESSINFO_ADDITIONS_H_
+#define CHROME_BROWSER_MAC_NSPROCESSINFO_ADDITIONS_H_
+
+#import <Foundation/Foundation.h>
+
+@interface NSProcessInfo(ChromeAdditions)
+// Returns YES if the current process is the main browser process or a test
+// process. A better way is to check the command line directly (i.e.
+// base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kProcessType)),
+// however that's not always possible, such as within a class's +load method.
+// This method returns YES for test processes because it checks for the "type"
+// switch on the command line, which test processes don't have. If your code
+// should not run in a test process you will need to apply additional logic.
+- (BOOL)cr_isMainBrowserOrTestProcess;
+@end
+
+#endif  // CHROME_BROWSER_MAC_NSPROCESSINFO_ADDITIONS_H_
diff --git a/chrome/browser/mac/nsprocessinfo_additions.mm b/chrome/browser/mac/nsprocessinfo_additions.mm
new file mode 100644
index 0000000..05b8cb0e
--- /dev/null
+++ b/chrome/browser/mac/nsprocessinfo_additions.mm
@@ -0,0 +1,22 @@
+// 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.
+
+#import "chrome/browser/mac/nsprocessinfo_additions.h"
+
+#import "content/public/common/content_switches.h"
+
+@implementation NSProcessInfo(ChromeAdditions)
+
+- (BOOL)cr_isMainBrowserOrTestProcess {
+  NSString* processTypeString =
+      [NSString stringWithFormat:@"--%s=", switches::kProcessType];
+
+  for (NSString *argument in [self arguments]) {
+    if ([argument hasPrefix:processTypeString])
+      return NO;
+  }
+  return YES;
+}
+
+@end
diff --git a/chrome/browser/media/chrome_webrtc_browsertest.cc b/chrome/browser/media/chrome_webrtc_browsertest.cc
index 2e0b0f8..9f7453e 100644
--- a/chrome/browser/media/chrome_webrtc_browsertest.cc
+++ b/chrome/browser/media/chrome_webrtc_browsertest.cc
@@ -14,6 +14,8 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/feature_h264_with_openh264_ffmpeg.h"
+#include "content/public/common/features.h"
 #include "content/public/test/browser_test_utils.h"
 #include "media/base/media_switches.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -80,6 +82,22 @@
   RunsAudioVideoWebRTCCallInTwoTabs("VP9");
 }
 
+#if BUILDFLAG(RTC_USE_H264)
+
+IN_PROC_BROWSER_TEST_F(WebRtcBrowserTest,
+                       RunsAudioVideoWebRTCCallInTwoTabsH264) {
+  // Only run test if run-time feature corresponding to |rtc_use_h264| is on.
+  if (!base::FeatureList::IsEnabled(content::kWebRtcH264WithOpenH264FFmpeg)) {
+    LOG(WARNING) << "Run-time feature WebRtcH264WithOpenH264FFmpeg disabled. "
+        "Skipping WebRtcBrowserTest.RunsAudioVideoWebRTCCallInTwoTabsH264 "
+        "(test \"OK\")";
+    return;
+  }
+  RunsAudioVideoWebRTCCallInTwoTabs("H264");
+}
+
+#endif  // BUILDFLAG(RTC_USE_H264)
+
 IN_PROC_BROWSER_TEST_F(WebRtcBrowserTest, TestWebAudioMediaStream) {
   // This tests against crash regressions for the WebAudio-MediaStream
   // integration.
diff --git a/chrome/browser/media/desktop_capture_access_handler.cc b/chrome/browser/media/desktop_capture_access_handler.cc
index 1eced46..48a9e8d3 100644
--- a/chrome/browser/media/desktop_capture_access_handler.cc
+++ b/chrome/browser/media/desktop_capture_access_handler.cc
@@ -105,10 +105,16 @@
   devices->push_back(content::MediaStreamDevice(
       content::MEDIA_DESKTOP_VIDEO_CAPTURE, media_id.ToString(), "Screen"));
   if (capture_audio) {
-    // Use the special loopback device ID for system audio capture.
-    devices->push_back(content::MediaStreamDevice(
-        content::MEDIA_DESKTOP_AUDIO_CAPTURE,
-        media::AudioManagerBase::kLoopbackInputDeviceId, "System Audio"));
+    if (media_id.type == content::DesktopMediaID::TYPE_WEB_CONTENTS) {
+      devices->push_back(
+          content::MediaStreamDevice(content::MEDIA_DESKTOP_AUDIO_CAPTURE,
+                                     media_id.ToString(), "Tab audio"));
+    } else {
+      // Use the special loopback device ID for system audio capture.
+      devices->push_back(content::MediaStreamDevice(
+          content::MEDIA_DESKTOP_AUDIO_CAPTURE,
+          media::AudioManagerBase::kLoopbackInputDeviceId, "System Audio"));
+    }
   }
 
   // If required, register to display the notification for stream capture.
@@ -346,22 +352,23 @@
 
   // This value essentially from the checkbox on picker window, so it
   // corresponds to user permission.
-  bool audio_permitted = media_id.audio_share;
+  const bool audio_permitted = media_id.audio_share;
 
   // This value essentially from whether getUserMedia requests audio stream.
-  bool audio_requested =
+  const bool audio_requested =
       request.audio_type == content::MEDIA_DESKTOP_AUDIO_CAPTURE;
 
   // This value shows for a given capture type, whether the system or our code
-  // can support audio sharing. Currently audio is only supported for screen
-  // capture streams.
-  bool audio_supported =
-      media_id.type == content::DesktopMediaID::TYPE_SCREEN &&
-      loopback_audio_supported;
+  // can support audio sharing. Currently audio is only supported for screen and
+  // tab/webcontents capture streams.
+  const bool audio_supported =
+      (media_id.type == content::DesktopMediaID::TYPE_SCREEN &&
+       loopback_audio_supported) ||
+      media_id.type == content::DesktopMediaID::TYPE_WEB_CONTENTS;
 
-  bool has_flag = base::CommandLine::ForCurrentProcess()->HasSwitch(
+  const bool has_flag = base::CommandLine::ForCurrentProcess()->HasSwitch(
       extensions::switches::kEnableDesktopCaptureAudio);
-  bool capture_audio =
+  const bool capture_audio =
       (has_flag ? audio_permitted : true) && audio_requested && audio_supported;
 
   ui = GetDevicesForDesktopCapture(&devices, media_id, capture_audio, true,
diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc
index a4e2fc5..3c125e4 100644
--- a/chrome/browser/notifications/platform_notification_service_impl.cc
+++ b/chrome/browser/notifications/platform_notification_service_impl.cc
@@ -217,8 +217,13 @@
     BrowserContext* browser_context,
     int64_t persistent_notification_id,
     const GURL& origin,
-    bool by_user) const {
+    bool by_user) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  // If we programatically closed this notification, don't dispatch any event.
+  if (closed_notifications_.erase(persistent_notification_id) != 0)
+    return;
+
   if (by_user) {
     content::RecordAction(base::UserMetricsAction(
         "Notifications.Persistent.ClosedByUser"));
@@ -400,6 +405,8 @@
   Profile* profile = Profile::FromBrowserContext(browser_context);
   DCHECK(profile);
 
+  closed_notifications_.insert(persistent_notification_id);
+
 #if defined(OS_ANDROID)
   bool cancel_by_persistent_id = true;
 #else
diff --git a/chrome/browser/notifications/platform_notification_service_impl.h b/chrome/browser/notifications/platform_notification_service_impl.h
index a7978d9..28bbbed2 100644
--- a/chrome/browser/notifications/platform_notification_service_impl.h
+++ b/chrome/browser/notifications/platform_notification_service_impl.h
@@ -9,6 +9,7 @@
 #include <map>
 #include <set>
 #include <string>
+#include <unordered_set>
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
@@ -71,11 +72,10 @@
   // associated with the notification has to be pruned from the database in this
   // case, to make sure that it continues to be in sync. Must be called on the
   // UI thread.
-  void OnPersistentNotificationClose(
-      content::BrowserContext* browser_context,
-      int64_t persistent_notification_id,
-      const GURL& origin,
-      bool by_user) const;
+  void OnPersistentNotificationClose(content::BrowserContext* browser_context,
+                                     int64_t persistent_notification_id,
+                                     const GURL& origin,
+                                     bool by_user);
 
   // Returns the Notification UI Manager through which notifications can be
   // displayed to the user. Can be overridden for testing.
@@ -155,6 +155,10 @@
   // message_center::Notification object. Must only be used on the UI thread.
   std::map<int64_t, std::string> persistent_notifications_;
 
+  // Tracks the id of persistent notifications that have been closed
+  // programmatically to avoid dispatching close events for them.
+  std::unordered_set<int64_t> closed_notifications_;
+
   DISALLOW_COPY_AND_ASSIGN(PlatformNotificationServiceImpl);
 };
 
diff --git a/chrome/browser/ntp_snippets/ntp_snippets_service_factory.cc b/chrome/browser/ntp_snippets/ntp_snippets_service_factory.cc
index 0cf2dba..50a22944 100644
--- a/chrome/browser/ntp_snippets/ntp_snippets_service_factory.cc
+++ b/chrome/browser/ntp_snippets/ntp_snippets_service_factory.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/ntp_snippets/ntp_snippets_fetcher.h"
+#include "components/ntp_snippets/ntp_snippets_scheduler.h"
 #include "components/ntp_snippets/ntp_snippets_service.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
@@ -19,6 +20,10 @@
 #include "content/public/browser/browser_thread.h"
 #include "net/url_request/url_request_context_getter.h"
 
+#if defined(OS_ANDROID)
+#include "chrome/browser/android/ntp_snippets_launcher.h"
+#endif  // OS_ANDROID
+
 using content::BrowserThread;
 
 // static
@@ -51,6 +56,11 @@
   scoped_refptr<net::URLRequestContextGetter> request_context =
       context->GetRequestContext();
 
+  ntp_snippets::NTPSnippetsScheduler* scheduler = nullptr;
+#if defined(OS_ANDROID)
+  scheduler = NTPSnippetsLauncher::Get();
+#endif  // OS_ANDROID
+
   scoped_refptr<base::SequencedTaskRunner> task_runner =
       BrowserThread::GetBlockingPool()
           ->GetSequencedTaskRunnerWithShutdownBehavior(
@@ -58,7 +68,7 @@
               base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
 
   return new ntp_snippets::NTPSnippetsService(
-      task_runner, g_browser_process->GetApplicationLocale(),
+      task_runner, g_browser_process->GetApplicationLocale(), scheduler,
       make_scoped_ptr(new ntp_snippets::NTPSnippetsFetcher(
           task_runner, signin_manager, token_service, request_context,
           profile->GetPath())));
diff --git a/chrome/browser/page_load_metrics/OWNERS b/chrome/browser/page_load_metrics/OWNERS
index 97ebd81f..558b9927 100644
--- a/chrome/browser/page_load_metrics/OWNERS
+++ b/chrome/browser/page_load_metrics/OWNERS
@@ -1,3 +1,4 @@
+csharrison@chromium.org
 kinuko@chromium.org
 rdsmith@chromium.org
 ttuttle@chromium.org
diff --git a/chrome/browser/policy/test/policy_testserver.py b/chrome/browser/policy/test/policy_testserver.py
index 480124c..c7f933d 100644
--- a/chrome/browser/policy/test/policy_testserver.py
+++ b/chrome/browser/policy/test/policy_testserver.py
@@ -376,6 +376,8 @@
       return (403, 'No authorization')
 
     policy = self.server.GetPolicies()
+    if ('managed_users' not in policy):
+      return (500, 'error in config - no managed users')
     username = self.server.ResolveUser(auth)
     if ('*' not in policy['managed_users'] and
         username not in policy['managed_users']):
@@ -990,7 +992,7 @@
         pass
 
   def GetPolicies(self):
-    """Returns the policies to be used, reloaded form the backend file every
+    """Returns the policies to be used, reloaded from the backend file every
        time this is called.
     """
     policy = {}
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 11d852b..a5de323 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/deferred_sequenced_task_runner.h"
+#include "base/feature_list.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -106,8 +107,10 @@
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
 #endif
 
-#if defined(OS_WIN)
-#include "chrome/installer/util/browser_distribution.h"
+#if defined(OS_ANDROID)
+#include "chrome/browser/android/chrome_feature_list.h"
+#include "chrome/browser/ntp_snippets/ntp_snippets_service_factory.h"
+#include "components/ntp_snippets/ntp_snippets_service.h"
 #endif
 
 #if defined(OS_CHROMEOS)
@@ -1150,6 +1153,14 @@
   // migration code, rough time estimates are Q1 2016.
   PasswordManagerSettingMigratorServiceFactory::GetForProfile(profile)
       ->InitializeMigration(ProfileSyncServiceFactory::GetForProfile(profile));
+
+#if defined(OS_ANDROID)
+  // Service is responsible for fetching content snippets for the NTP.
+  // Note: Create the service even if the feature is disabled, so that any
+  // remaining tasks will be cleaned up.
+  NTPSnippetsServiceFactory::GetForProfile(profile)->Init(
+      base::FeatureList::IsEnabled(chrome::android::kNTPSnippetsFeature));
+#endif
 }
 
 void ProfileManager::DoFinalInitLogging(Profile* profile) {
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
index b9f47358..b13e6ffb 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
@@ -150,6 +150,13 @@
 .sink-domain {
   -webkit-padding-start: 6px;
   color: var(--subtext-color);
+  /* TODO(crbug/589697): Handle overflow of very long domain names. */
+}
+
+.sink-name {
+  min-width: 10%;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 
 .sink-subtext {
@@ -159,10 +166,10 @@
 
 .sink-text {
   -webkit-padding-end: var(--dialog-padding-end);
+  display: inline-flex;
   flex-direction: row;
+  flex-flow: row nowrap;
   line-height: normal;
-  overflow: hidden;
-  text-overflow: ellipsis;
   white-space: nowrap;
   width: 250px;
 }
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.html b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.html
index 2df8bbd3..a486053 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.html
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.html
@@ -119,10 +119,12 @@
               </div>
               <div>
                 <div class="sink-text">
-                  <span dir="auto">[[item.name]]</span>
+                  <span dir="auto" class="sink-name" title="[[item.name]]">
+                    [[item.name]]
+                  </span>
                   <template is="dom-if"
                       if="[[!computeSinkDomainHidden_(item)]]">
-                    <span class="sink-domain">
+                    <span class="sink-domain" title="[[item.domain]]">
                       [[item.domain]]
                     </span>
                   </template>
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
index 0fc28c5..6e51342 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
@@ -297,6 +297,15 @@
     },
 
     /**
+     * Whether to show the user domain of sinks associated with identity.
+     * @type {boolean}
+     */
+    showDomain: {
+      type: Boolean,
+      value: false,
+    },
+
+    /**
      * Whether to show the first run flow.
      * @type {boolean}
      */
@@ -381,6 +390,7 @@
   },
 
   listeners: {
+    'header-height-changed': 'updateElementPositioning_',
     'header-or-arrow-click': 'toggleCastModeHidden_',
     'mouseleave': 'onMouseLeave_',
     'mouseenter': 'onMouseEnter_',
@@ -730,9 +740,7 @@
    * @private
    */
   computeSinkDomainHidden_: function(sink) {
-    // TODO(amp): Check the domain of Chrome profile identity and only show the
-    // sink domain if it doesn't match the profile domain. crbug.com/570797
-    return this.isEmptyOrWhitespace_(sink.domain);
+    return !this.showDomain || this.isEmptyOrWhitespace_(sink.domain);
   },
 
   /**
diff --git a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.css b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.css
index 81a7a1b..42d3a1c 100644
--- a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.css
+++ b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.css
@@ -75,3 +75,9 @@
 paper-toolbar.sink-list {
   background-color: var(--paper-blue-500);
 }
+
+#user-email-container {
+  -webkit-padding-start: 12px;
+  font-size: 0.917em;
+  padding-bottom: 12px;
+}
diff --git a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.html b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.html
index 621cf99..cb892af2e 100644
--- a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.html
+++ b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.html
@@ -5,7 +5,7 @@
   <link rel="import" type="css" href="../../media_router_common.css">
   <link rel="import" type="css" href="media_router_header.css">
   <template>
-    <paper-toolbar class$="[[view]]">
+    <paper-toolbar id="header-toolbar" class$="[[view]]">
       <div id="back-button-container">
         <paper-icon-button id="back-button" icon="[[arrowDropIcon_]]"
             on-click="onBackButtonClick_"
@@ -27,6 +27,11 @@
             on-click="onCloseButtonClick_">
         </paper-icon-button>
       </div>
+      <template is="dom-if" if="[[showEmail]]">
+        <div id="user-email-container" class="bottom fit">
+          <span>[[userEmail]]</span>
+        </div>
+      </template>
     </paper-toolbar>
   </template>
 <script src="media_router_header.js"></script>
diff --git a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.js b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.js
index 3afac7f4..25b5147 100644
--- a/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.js
+++ b/chrome/browser/resources/media_router/elements/media_router_header/media_router_header.js
@@ -36,13 +36,23 @@
     },
 
     /**
-     * The current view that this header should reflect.
-     * @type {?media_router.MediaRouterView}
+     * The height of the header when it shows the user email.
+     * @private {number}
      */
-    view: {
-      type: String,
-      value: null,
-      observer: 'updateHeaderCursorStyle_',
+    headerWithEmailHeight_: {
+      type: Number,
+      readOnly: true,
+      value: 62,
+    },
+
+    /**
+     * Whether to show the user email in the header.
+     * @type {boolean}
+     */
+    showEmail: {
+      type: Boolean,
+      value: false,
+      observer: 'maybeChangeHeaderHeight_',
     },
 
     /**
@@ -53,6 +63,25 @@
       type: String,
       value: '',
     },
+
+    /**
+     * The user email if they are signed in.
+     * @type {string}
+     */
+    userEmail: {
+      type: String,
+      value: '',
+    },
+
+    /**
+     * The current view that this header should reflect.
+     * @type {?media_router.MediaRouterView}
+     */
+    view: {
+      type: String,
+      value: null,
+      observer: 'updateHeaderCursorStyle_',
+    },
   },
 
   attached: function() {
@@ -91,6 +120,17 @@
   },
 
   /**
+   * Returns whether given string is undefined, null, empty, or whitespace only.
+   * @param {?string} str String to be tested.
+   * @return {boolean} |true| if the string is undefined, null, empty, or
+   *     whitespace.
+   * @private
+   */
+  isEmptyOrWhitespace_: function(str) {
+    return str === undefined || str === null || (/^\s*$/).test(str);
+  },
+
+  /**
    * Handles a click on the arrow button by firing an arrow-click event.
    *
    * @private
@@ -121,6 +161,34 @@
   },
 
   /**
+   * Updates header height to accomodate email text. This is called on changes
+   * to |showEmail| and will return early if the value has not changed.
+   *
+   * @param {boolean} oldValue .
+   * @param {boolean} newValue .
+   * @private
+   */
+  maybeChangeHeaderHeight_: function(oldValue, newValue) {
+    if (!!oldValue == !!newValue) {
+      return;
+    }
+
+    // Ensures conditional templates are stamped.
+    this.async(function() {
+      var currentHeight = this.offsetHeight;
+
+      this.$$('#header-toolbar').style.height =
+          this.showEmail && !this.isEmptyOrWhitespace_(this.userEmail) ?
+              this.headerWithEmailHeight_ + 'px' : undefined;
+
+      // Only fire if height actually changed.
+      if (currentHeight != this.offsetHeight) {
+        this.fire('header-height-changed');
+      }
+    });
+  },
+
+  /**
    * Updates the cursor style for the header text when the view changes. When
    * the drop arrow is also shown, the header text is also clickable.
    *
diff --git a/chrome/browser/resources/media_router/media_router.js b/chrome/browser/resources/media_router/media_router.js
index 12033b63..ec99f7d 100644
--- a/chrome/browser/resources/media_router/media_router.js
+++ b/chrome/browser/resources/media_router/media_router.js
@@ -28,7 +28,10 @@
 
     container = /** @type {!MediaRouterContainerElement} */
         ($('media-router-container'));
-    media_router.ui.setContainer(container);
+
+    media_router.ui.setElements(container,
+        /** @type {!MediaRouterHeaderElement} */
+        (container.$['container-header']));
 
     container.addEventListener('acknowledge-first-run-flow',
                                onAcknowledgeFirstRunFlow);
diff --git a/chrome/browser/resources/media_router/media_router_ui_interface.js b/chrome/browser/resources/media_router/media_router_ui_interface.js
index e037b12..37afa99f 100644
--- a/chrome/browser/resources/media_router/media_router_ui_interface.js
+++ b/chrome/browser/resources/media_router/media_router_ui_interface.js
@@ -10,6 +10,9 @@
   // The media-router-container element.
   var container = null;
 
+  // The media-router-header element.
+  var header = null;
+
   /**
    * Handles response of previous create route attempt.
    *
@@ -33,12 +36,14 @@
   }
 
   /**
-   * Sets |container|.
+   * Sets |container| and |header|.
    *
    * @param {!MediaRouterContainerElement} mediaRouterContainer
+   * @param {!MediaRouterHeaderElement} mediaRouterHeader
    */
-  function setContainer(mediaRouterContainer) {
+  function setElements(mediaRouterContainer, mediaRouterHeader) {
     container = mediaRouterContainer;
+    header = mediaRouterHeader;
   }
 
   /**
@@ -76,19 +81,25 @@
    * Populates the WebUI with data obtained from Media Router.
    *
    * @param {{deviceMissingUrl: string,
-   *          sinks: !Array<!media_router.Sink>,
+   *          sinksAndIdentity: {
+   *            sinks: !Array<!media_router.Sink>,
+   *            showEmail: boolean,
+   *            userEmail: string,
+   *            showDomain: boolean,
+   *            userDomain: string
+   *          },
    *          routes: !Array<!media_router.Route>,
    *          castModes: !Array<!media_router.CastMode>}} data
    * Parameters in data:
    *   deviceMissingUrl - url to be opened on "Device missing?" clicked.
-   *   sinks - list of sinks to be displayed.
+   *   sinksAndIdentity - list of sinks to be displayed and user identity.
    *   routes - list of routes that are associated with the sinks.
    *   castModes - list of available cast modes.
    */
   function setInitialData(data) {
     container.deviceMissingUrl = data['deviceMissingUrl'];
     container.castModeList = data['castModes'];
-    container.allSinks = data['sinks'];
+    this.setSinkListAndIdentity(data['sinksAndIdentity']);
     container.routeList = data['routes'];
     container.maybeShowRouteDetailsOnOpen();
     media_router.browserApi.onInitialDataReceived();
@@ -114,12 +125,27 @@
   }
 
   /**
-   * Sets the list of discovered sinks.
+   * Sets the list of discovered sinks along with properties of whether to hide
+   * identity of the user email and domain.
    *
-   * @param {!Array<!media_router.Sink>} sinkList
+   * @param {{sinks: !Array<!media_router.Sink>,
+   *          showEmail: boolean,
+   *          userEmail: string,
+   *          showDomain: boolean,
+   *          userDomain: string,}} data
+   * Parameters in data:
+   *   sinks - list of sinks to be displayed.
+   *   showEmail - true if the user email should be shown.
+   *   userEmail - email of the user if the user is signed in.
+   *   showDomain - true if the user domain should be shown.
+   *   userDomain - domain of the user if the user is signed in.
    */
-  function setSinkList(sinkList) {
-    container.allSinks = sinkList;
+  function setSinkListAndIdentity(data) {
+    container.allSinks = data['sinks'];
+    container.showDomain = data['showDomain'];
+    container.userDomain = data['userDomain'];
+    header.showEmail = data['showEmail'];
+    header.userEmail = data['userEmail'];
   }
 
   /**
@@ -134,12 +160,12 @@
   return {
     onCreateRouteResponseReceived: onCreateRouteResponseReceived,
     setCastModeList: setCastModeList,
-    setContainer: setContainer,
+    setElements: setElements,
     setFirstRunFlowData: setFirstRunFlowData,
     setInitialData: setInitialData,
     setIssue: setIssue,
     setRouteList: setRouteList,
-    setSinkList: setSinkList,
+    setSinkListAndIdentity: setSinkListAndIdentity,
     updateMaxHeight: updateMaxHeight,
   };
 });
diff --git a/chrome/browser/resources/options/browser_options.js b/chrome/browser/resources/options/browser_options.js
index c5347ef..5ef260a 100644
--- a/chrome/browser/resources/options/browser_options.js
+++ b/chrome/browser/resources/options/browser_options.js
@@ -1477,7 +1477,7 @@
       else
         $('profiles-manage').title = '';
       $('profiles-delete').disabled = !profilesList.canDeleteItems ||
-                                      (!hasSelection && !hasSingleProfile);
+                                      !hasSelection;
       if (OptionsPage.isSettingsApp()) {
         $('profiles-app-list-switch').disabled = !hasSelection ||
             selectedProfile.isCurrentProfile;
diff --git a/chrome/browser/resources/print_preview/data/ticket_items/page_range.js b/chrome/browser/resources/print_preview/data/ticket_items/page_range.js
index bbb3f82..db20e71 100644
--- a/chrome/browser/resources/print_preview/data/ticket_items/page_range.js
+++ b/chrome/browser/resources/print_preview/data/ticket_items/page_range.js
@@ -35,8 +35,9 @@
 
     /** @override */
     wouldValueBeValid: function(value) {
-      return null != pageRangeTextToPageRanges(
+      var result = pageRangeTextToPageRanges(
           value, this.getDocumentInfoInternal().pageCount);
+      return result instanceof Array;
     },
 
     /**
@@ -69,7 +70,8 @@
      *     ranges.
      */
     getPageRanges: function() {
-      return pageRangeTextToPageRanges(this.getValue()) || [];
+      var pageRanges = pageRangeTextToPageRanges(this.getValue());
+      return pageRanges instanceof Array ? pageRanges : [];
     },
 
     /**
@@ -81,7 +83,24 @@
     getDocumentPageRanges: function() {
       var pageRanges = pageRangeTextToPageRanges(
           this.getValue(), this.getDocumentInfoInternal().pageCount);
-      return pageRanges || [];
+      return pageRanges instanceof Array ? pageRanges : [];
+    },
+
+    /**
+     * @return {!number} Number of pages reported by the document.
+     */
+    getDocumentNumPages: function() {
+      return this.getDocumentInfoInternal().pageCount;
+    },
+
+    /**
+     * @return {!PageRangeStatus}
+     */
+    checkValidity: function() {
+      var pageRanges = pageRangeTextToPageRanges(
+          this.getValue(), this.getDocumentInfoInternal().pageCount);
+      return pageRanges instanceof Array ?
+          PageRangeStatus.NO_ERROR : pageRanges;
     },
   };
 
diff --git a/chrome/browser/resources/print_preview/print_preview_utils.js b/chrome/browser/resources/print_preview/print_preview_utils.js
index 0cacb70..2ab83dc1 100644
--- a/chrome/browser/resources/print_preview/print_preview_utils.js
+++ b/chrome/browser/resources/print_preview/print_preview_utils.js
@@ -72,16 +72,25 @@
   return out;
 }
 
+/** @enum {number} */
+var PageRangeStatus = {
+  NO_ERROR: 0,
+  SYNTAX_ERROR: -1,
+  LIMIT_ERROR: -2
+};
+
 /**
  * Returns a list of ranges in |pageRangeText|. The ranges are
  * listed in the order they appear in |pageRangeText| and duplicates are not
- * eliminated. If |pageRangeText| is not valid null is returned.
+ * eliminated. If |pageRangeText| is not valid, PageRangeStatus.SYNTAX_ERROR
+ * is returned.
  * A valid selection has a parsable format and every page identifier is
- * greater the 0 and less or equal to |totalPageCount| unless wildcards are
- * used(see examples).
+ * greater than 0 unless wildcards are used(see examples).
+ * If a page is greater than |totalPageCount|, PageRangeStatus.LIMIT_ERROR
+ * is returned.
  * If |totalPageCount| is 0 or undefined function uses impossibly large number
  * instead.
- * Wildcard the first number must be larger then 0 and less or equal then
+ * Wildcard the first number must be larger than 0 and less or equal then
  * |totalPageCount|. If it's missed then 1 is used as the first number.
  * Wildcard the second number must be larger then the first number. If it's
  * missed then |totalPageCount| is used as the second number.
@@ -94,7 +103,7 @@
  * Example: "1-4dsf, 11" is invalid regardless of |totalPageCount|.
  * @param {string} pageRangeText The text to be checked.
  * @param {number=} opt_totalPageCount The total number of pages.
- * @return {?Array<{from: number, to: number}>} An array of page range objects.
+ * @return {!PageRangeStatus|!Array<{from: number, to: number}>}
  */
 function pageRangeTextToPageRanges(pageRangeText, opt_totalPageCount) {
   if (pageRangeText == '') {
@@ -113,20 +122,22 @@
     var match = parts[i].match(regex);
     if (match) {
       if (!isPositiveInteger(match[1]) && match[1] !== '')
-        return null;
+        return PageRangeStatus.SYNTAX_ERROR;
       if (!isPositiveInteger(match[2]) && match[2] !== '')
-        return null;
+        return PageRangeStatus.SYNTAX_ERROR;
       var from = match[1] ? parseInt(match[1], 10) : 1;
       var to = match[2] ? parseInt(match[2], 10) : totalPageCount;
-      if (from > to || to > totalPageCount)
-        return null;
+      if (from > to)
+        return PageRangeStatus.SYNTAX_ERROR;
+      if (to > totalPageCount)
+        return PageRangeStatus.LIMIT_ERROR;
       pageRanges.push({'from': from, 'to': to});
     } else {
       if (!isPositiveInteger(parts[i]))
-        return null;
+        return PageRangeStatus.SYNTAX_ERROR;
       var singlePageNumber = parseInt(parts[i], 10);
       if (singlePageNumber > totalPageCount)
-        return null;
+        return PageRangeStatus.LIMIT_ERROR;
       pageRanges.push({'from': singlePageNumber, 'to': singlePageNumber});
     }
   }
@@ -146,7 +157,7 @@
 function pageRangeTextToPageList(pageRangeText, totalPageCount) {
   var pageRanges = pageRangeTextToPageRanges(pageRangeText, totalPageCount);
   var pageList = [];
-  if (pageRanges) {
+  if (pageRanges instanceof Array) {
     for (var i = 0; i < pageRanges.length; ++i) {
       for (var j = pageRanges[i].from; j <= Math.min(pageRanges[i].to,
                                                      totalPageCount); ++j) {
diff --git a/chrome/browser/resources/print_preview/print_preview_utils_unittest.gtestjs b/chrome/browser/resources/print_preview/print_preview_utils_unittest.gtestjs
index dd17e6e..ff15d6f 100644
--- a/chrome/browser/resources/print_preview/print_preview_utils_unittest.gtestjs
+++ b/chrome/browser/resources/print_preview/print_preview_utils_unittest.gtestjs
@@ -89,12 +89,18 @@
 });
 
 TEST_F('PrintPreviewUtilsUnitTest', 'InvalidPageRanges', function() {
-  assertTrue(pageRangeTextToPageRanges("10-100000", 100) === null);
-  assertTrue(pageRangeTextToPageRanges("1,100000", 100) === null);
-  assertTrue(pageRangeTextToPageRanges("1,2,0,56", 100) === null);
-  assertTrue(pageRangeTextToPageRanges("-1,1,2,,56", 100) === null);
-  assertTrue(pageRangeTextToPageRanges("1,2,56-40", 100) === null);
-  assertTrue(pageRangeTextToPageRanges("101-110", 100) === null);
+  assertEquals(PageRangeStatus.LIMIT_ERROR,
+      pageRangeTextToPageRanges("10-100000", 100));
+  assertEquals(PageRangeStatus.LIMIT_ERROR,
+      pageRangeTextToPageRanges("1,100000", 100));
+  assertEquals(PageRangeStatus.SYNTAX_ERROR,
+      pageRangeTextToPageRanges("1,2,0,56", 100));
+  assertEquals(PageRangeStatus.SYNTAX_ERROR,
+      pageRangeTextToPageRanges("-1,1,2,,56", 100));
+  assertEquals(PageRangeStatus.SYNTAX_ERROR,
+      pageRangeTextToPageRanges("1,2,56-40", 100));
+  assertEquals(PageRangeStatus.LIMIT_ERROR,
+      pageRangeTextToPageRanges("101-110", 100));
 });
 
 TEST_F('PrintPreviewUtilsUnitTest', 'PageRangeTextToPageList', function() {
diff --git a/chrome/browser/resources/print_preview/settings/page_settings.js b/chrome/browser/resources/print_preview/settings/page_settings.js
index 78aeeb8..ef1cf17 100644
--- a/chrome/browser/resources/print_preview/settings/page_settings.js
+++ b/chrome/browser/resources/print_preview/settings/page_settings.js
@@ -138,17 +138,30 @@
           PageSettings.Classes_.CUSTOM_RADIO)[0];
       this.customHintEl_ = this.getElement().getElementsByClassName(
           PageSettings.Classes_.CUSTOM_HINT)[0];
-      this.customHintEl_.textContent = loadTimeData.getStringF(
-          'pageRangeInstruction',
-          loadTimeData.getString('examplePageRangeText'));
     },
 
     /**
-     * @param {boolean} isVisible Whether the custom hint is visible.
+     * @param {!PageRangeStatus} validity (of page range)
      * @private
      */
-    setInvalidStateVisible_: function(isVisible) {
-      if (isVisible) {
+    setInvalidStateVisible_: function(validity) {
+      if (validity !== PageRangeStatus.NO_ERROR) {
+        var message;
+        if (validity === PageRangeStatus.LIMIT_ERROR) {
+          if (this.pageRangeTicketItem_.getDocumentNumPages()) {
+            message = loadTimeData.getStringF(
+                'pageRangeLimitInstructionWithValue',
+                this.pageRangeTicketItem_.getDocumentNumPages());
+          } else {
+            message = loadTimeData.getString(
+                'pageRangeLimitInstruction');
+          }
+        } else {
+          message = loadTimeData.getStringF(
+              'pageRangeSyntaxInstruction',
+              loadTimeData.getString('examplePageRangeText'));
+        }
+        this.customHintEl_.textContent = message;
         this.customInput_.classList.add('invalid');
         fadeInElement(this.customHintEl_);
       } else {
@@ -247,10 +260,11 @@
             this.customInput_.value = pageRangeStr;
           }
           this.customRadio_.checked = true;
-          this.setInvalidStateVisible_(!this.pageRangeTicketItem_.isValid());
+          this.setInvalidStateVisible_(
+              this.pageRangeTicketItem_.checkValidity());
         } else {
           this.allRadio_.checked = true;
-          this.setInvalidStateVisible_(false);
+          this.setInvalidStateVisible_(PageRangeStatus.NO_ERROR);
         }
       }
       this.updateUiStateInternal();
diff --git a/chrome/browser/safe_browsing/incident_reporting/blacklist_load_incident_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/blacklist_load_incident_unittest.cc
index 91a0981..d9efc935 100644
--- a/chrome/browser/safe_browsing/incident_reporting/blacklist_load_incident_unittest.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/blacklist_load_incident_unittest.cc
@@ -14,34 +14,34 @@
 
 namespace {
 
-scoped_ptr<Incident> MakeIncident(const char* digest) {
+scoped_ptr<Incident> MakeIncident(const char* path) {
   scoped_ptr<ClientIncidentReport_IncidentData_BlacklistLoadIncident> incident(
       new ClientIncidentReport_IncidentData_BlacklistLoadIncident);
-  incident->set_path("foo");
+  incident->set_path(path);
   return make_scoped_ptr(new BlacklistLoadIncident(std::move(incident)));
 }
 
 }  // namespace
 
 TEST(BlacklistLoadIncident, GetType) {
-  ASSERT_EQ(IncidentType::BLACKLIST_LOAD, MakeIncident("37")->GetType());
+  ASSERT_EQ(IncidentType::BLACKLIST_LOAD, MakeIncident("foo")->GetType());
 }
 
 // Tests that GetKey returns the dll path.
 TEST(BlacklistLoadIncident, KeyIsPath) {
-  ASSERT_EQ(std::string("foo"), MakeIncident("37")->GetKey());
+  ASSERT_EQ(std::string("foo"), MakeIncident("foo")->GetKey());
 }
 
 // Tests that GetDigest returns the same value for the same incident.
 TEST(BlacklistLoadIncident, SameIncidentSameDigest) {
-  ASSERT_EQ(MakeIncident("37")->ComputeDigest(),
-            MakeIncident("37")->ComputeDigest());
+  ASSERT_EQ(MakeIncident("foo")->ComputeDigest(),
+            MakeIncident("foo")->ComputeDigest());
 }
 
 // Tests that GetDigest returns different values for different incidents.
 TEST(BlacklistLoadIncident, DifferentIncidentDifferentDigest) {
-  ASSERT_EQ(MakeIncident("37")->ComputeDigest(),
-            MakeIncident("42")->ComputeDigest());
+  ASSERT_NE(MakeIncident("foo")->ComputeDigest(),
+            MakeIncident("bar")->ComputeDigest());
 }
 
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident.cc b/chrome/browser/safe_browsing/incident_reporting/incident.cc
index 3e7a79780..ed3fea1 100644
--- a/chrome/browser/safe_browsing/incident_reporting/incident.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/incident.cc
@@ -19,6 +19,10 @@
   return std::move(payload_);
 }
 
+MinimumProfileConsent Incident::GetMinimumProfileConsent() const {
+  return MinimumProfileConsent::SAFE_BROWSING_ENABLED;
+}
+
 Incident::Incident() : payload_(new ClientIncidentReport_IncidentData) {
   payload_->set_incident_time_msec(base::Time::Now().ToJavaTime());
 }
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident.h b/chrome/browser/safe_browsing/incident_reporting/incident.h
index 2fa84c9..761816d 100644
--- a/chrome/browser/safe_browsing/incident_reporting/incident.h
+++ b/chrome/browser/safe_browsing/incident_reporting/incident.h
@@ -27,8 +27,16 @@
   OMNIBOX_INTERACTION = 4,
   VARIATIONS_SEED_SIGNATURE = 5,
   RESOURCE_REQUEST = 6,
+  SUSPICIOUS_MODULE = 7,
   // Values for new incident types go here.
-  NUM_TYPES = 7
+  NUM_TYPES = 8
+};
+
+// The level of consent required by the incident to be associated with a
+// profile.
+enum class MinimumProfileConsent {
+  SAFE_BROWSING_ENABLED = 0,
+  SAFE_BROWSING_EXTENDED_REPORTING_ENABLED = 1,
 };
 
 // An abstract incident. Subclasses provide type-specific functionality to
@@ -51,6 +59,10 @@
   // Returns the incident's payload.
   virtual scoped_ptr<ClientIncidentReport_IncidentData> TakePayload();
 
+  // Returns the minimum level of consent required for reporting of the
+  // incident.
+  virtual MinimumProfileConsent GetMinimumProfileConsent() const;
+
  protected:
   // Constructs the payload with an empty protobuf, setting its incident time to
   // the current time.
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
index db0a45df..18f91f5 100644
--- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
@@ -116,6 +116,22 @@
   return base::StartsWith(group_name, "Enabled", base::CompareCase::SENSITIVE);
 }
 
+bool ProfileCanAcceptIncident(Profile* profile, const Incident& incident) {
+  if (profile->IsOffTheRecord())
+    return false;
+  if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled))
+    return false;
+  switch (incident.GetMinimumProfileConsent()) {
+    case MinimumProfileConsent::SAFE_BROWSING_ENABLED:
+      return true;
+    case MinimumProfileConsent::SAFE_BROWSING_EXTENDED_REPORTING_ENABLED:
+      return profile->GetPrefs()->GetBoolean(
+          prefs::kSafeBrowsingExtendedReportingEnabled);
+  }
+  NOTREACHED();
+  return false;
+}
+
 }  // namespace
 
 struct IncidentReportingService::ProfileContext {
@@ -215,11 +231,11 @@
     scoped_ptr<Incident> incident) {
   if (thread_runner_->BelongsToCurrentThread()) {
     AddIncidentOnMainThread(service_, nullptr, std::move(incident));
-  } else if (!thread_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(&IncidentReportingService::Receiver::AddIncidentOnMainThread,
-                 service_, nullptr, base::Passed(&incident)))) {
-    LogIncidentDataType(DISCARDED, *incident);
+  } else {
+    thread_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&IncidentReportingService::Receiver::AddIncidentOnMainThread,
+                   service_, nullptr, base::Passed(&incident)));
   }
 }
 
@@ -320,6 +336,11 @@
           content::BrowserThread::GetBlockingPool()
               ->GetTaskRunnerWithShutdownBehavior(
                   base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
+      extended_reporting_only_delayed_analysis_callbacks_(
+          base::TimeDelta::FromMilliseconds(kDefaultCallbackIntervalMs),
+          content::BrowserThread::GetBlockingPool()
+              ->GetTaskRunnerWithShutdownBehavior(
+                  base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
       download_metadata_manager_(content::BrowserThread::GetBlockingPool()),
       receiver_weak_ptr_factory_(this),
       weak_ptr_factory_(this) {
@@ -387,6 +408,27 @@
     delayed_analysis_callbacks_.Start();
 }
 
+void IncidentReportingService::
+    RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+        const DelayedAnalysisCallback& callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // |callback| will be run on the blocking pool. The receiver will bounce back
+  // to the origin thread if needed.
+  extended_reporting_only_delayed_analysis_callbacks_.RegisterCallback(
+      base::Bind(callback, base::Passed(GetIncidentReceiver())));
+
+  // Start running the callbacks if any profiles have opted into Safebrowsing
+  // extended reporting. If none are now, running will commence if/when such a
+  // profile is added.
+  Profile* profile = FindEligibleProfile();
+  if (profile &&
+      profile->GetPrefs()->GetBoolean(
+          prefs::kSafeBrowsingExtendedReportingEnabled)) {
+    extended_reporting_only_delayed_analysis_callbacks_.Start();
+  }
+}
+
 void IncidentReportingService::AddDownloadManager(
     content::DownloadManager* download_manager) {
   download_metadata_manager_.AddDownloadManager(download_manager);
@@ -413,6 +455,8 @@
                        this,
                        &IncidentReportingService::OnCollationTimeout),
       delayed_analysis_callbacks_(delayed_task_interval, delayed_task_runner),
+      extended_reporting_only_delayed_analysis_callbacks_(delayed_task_interval,
+                                                          delayed_task_runner),
       download_metadata_manager_(content::BrowserThread::GetBlockingPool()),
       receiver_weak_ptr_factory_(this),
       weak_ptr_factory_(this) {
@@ -472,6 +516,11 @@
     // if they're already running.
     delayed_analysis_callbacks_.Start();
 
+    if (profile->GetPrefs()->GetBoolean(
+            prefs::kSafeBrowsingExtendedReportingEnabled)) {
+      extended_reporting_only_delayed_analysis_callbacks_.Start();
+    }
+
     // Start a new report if there are process-wide incidents, or incidents for
     // this profile.
     if ((GetProfileContext(nullptr) &&
@@ -908,12 +957,6 @@
     ProfileContext* context = profile_and_context.second;
     if (context->incidents.empty())
       continue;
-    if (!IsEnabledForProfile(profile_and_context.first)) {
-      for (const auto& incident : context->incidents)
-        LogIncidentDataType(DROPPED, *incident);
-      context->incidents.clear();
-      continue;
-    }
     StateStore::Transaction transaction(context->state_store.get());
     std::vector<PersistentIncidentState> states;
     // Prep persistent data and prune any incidents already sent.
@@ -922,6 +965,9 @@
       if (context->state_store->HasBeenReported(state.type, state.key,
                                                 state.digest)) {
         LogIncidentDataType(PRUNED, *incident);
+      } else if (!ProfileCanAcceptIncident(profile_and_context.first,
+                                           *incident)) {
+        LogIncidentDataType(DROPPED, *incident);
       } else if (!has_download) {
         LogIncidentDataType(NO_DOWNLOAD, *incident);
         // Drop the incident and mark for future pruning since no executable
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h
index 14ac749..d3d07309 100644
--- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h
+++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h
@@ -98,6 +98,11 @@
   // Registers |callback| to be run after some delay following process launch.
   void RegisterDelayedAnalysisCallback(const DelayedAnalysisCallback& callback);
 
+  // Registers |callback| to be run after some delay following process launch if
+  // a profile participating in extended reporting is found.
+  void RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+      const DelayedAnalysisCallback& callback);
+
   // Adds |download_manager| to the set monitored for client download request
   // storage.
   void AddDownloadManager(content::DownloadManager* download_manager);
@@ -333,6 +338,10 @@
   // Callbacks registered for performing delayed analysis.
   DelayedCallbackRunner delayed_analysis_callbacks_;
 
+  // Callbacks registered for performing delayed analysis that should only
+  // be executed for safebrowsing extended reporting users.
+  DelayedCallbackRunner extended_reporting_only_delayed_analysis_callbacks_;
+
   DownloadMetadataManager download_metadata_manager_;
 
   // The collection of uploads in progress.
diff --git a/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.cc b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.cc
new file mode 100644
index 0000000..98c3af7
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.cc
@@ -0,0 +1,45 @@
+// 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/safe_browsing/incident_reporting/module_load_analyzer.h"
+
+#include "base/feature_list.h"
+#include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident_receiver.h"
+#include "chrome/browser/safe_browsing/safe_browsing_service.h"
+#include "components/safe_browsing_db/database_manager.h"
+
+namespace safe_browsing {
+
+#if defined(OS_WIN)
+// Enables analysis and reporting of suspicious modules loaded in the process.
+extern const base::Feature kIncidentReportingModuleLoadAnalysis{
+    "IncidentReportingModuleLoadAnalysis", base::FEATURE_DISABLED_BY_DEFAULT};
+#endif
+
+void RegisterModuleLoadAnalysis(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager) {
+#if defined(OS_WIN)
+  DCHECK(database_manager);
+  if (base::FeatureList::IsEnabled(kIncidentReportingModuleLoadAnalysis)) {
+    scoped_refptr<SafeBrowsingService> safe_browsing_service(
+        g_browser_process->safe_browsing_service());
+
+    if (safe_browsing_service) {
+      safe_browsing_service
+          ->RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+              base::Bind(&VerifyModuleLoadState, database_manager));
+    }
+  }
+#endif
+}
+
+#if !defined(OS_WIN)
+void VerifyModuleLoadState(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
+    scoped_ptr<IncidentReceiver> incident_receiver) {}
+#endif  // !defined(OS_WIN)
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.h b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.h
new file mode 100644
index 0000000..d3e547e
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.h
@@ -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.
+
+#ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_MODULE_LOAD_ANALYZER_H_
+#define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_MODULE_LOAD_ANALYZER_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace safe_browsing {
+
+class IncidentReceiver;
+class SafeBrowsingDatabaseManager;
+
+// Registers a process-wide analysis with the incident reporting service that
+// will examine modules loaded in the process.
+void RegisterModuleLoadAnalysis(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager);
+
+// Callback to pass to the incident reporting service. The incident reporting
+// service will decide when to start the analysis.
+void VerifyModuleLoadState(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
+    scoped_ptr<IncidentReceiver> incident_receiver);
+
+}  // namespace safe_browsing
+
+#endif  // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_MODULE_LOAD_ANALYZER_H_
diff --git a/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win.cc b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win.cc
new file mode 100644
index 0000000..4ca360f6
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win.cc
@@ -0,0 +1,138 @@
+// 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/safe_browsing/incident_reporting/module_load_analyzer.h"
+
+#include <set>
+#include <utility>
+
+#include "base/file_version_info.h"
+#include "base/files/file_path.h"
+#include "base/i18n/case_conversion.h"
+#include "base/logging.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/install_verification/win/module_info.h"
+#include "chrome/browser/install_verification/win/module_verification_common.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident_receiver.h"
+#include "chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.h"
+#include "chrome/browser/safe_browsing/path_sanitizer.h"
+#include "chrome/common/safe_browsing/binary_feature_extractor.h"
+#include "chrome/common/safe_browsing/csd.pb.h"
+#include "content/public/browser/browser_thread.h"
+
+#if defined(SAFE_BROWSING_DB_LOCAL)
+#include "chrome/browser/safe_browsing/local_database_manager.h"
+#elif defined(SAFE_BROWSING_DB_REMOTE)
+#include "chrome/browser/safe_browsing/remote_database_manager.h"
+#endif
+
+namespace safe_browsing {
+
+namespace {
+
+void ReportIncidentsForSuspiciousModules(
+    scoped_ptr<std::set<base::FilePath>> module_paths,
+    scoped_ptr<IncidentReceiver> incident_receiver) {
+  PathSanitizer path_sanitizer;
+  scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor(
+      new BinaryFeatureExtractor());
+  SCOPED_UMA_HISTOGRAM_TIMER("SBIRS.SuspiciousModuleReportingTime");
+
+  for (const auto& module_path : *module_paths) {
+    // TODO(proberge): Skip over modules that have already been reported.
+
+    scoped_ptr<ClientIncidentReport_IncidentData_SuspiciousModuleIncident>
+        suspicious_module(
+            new ClientIncidentReport_IncidentData_SuspiciousModuleIncident());
+
+    // Sanitized path.
+    base::FilePath sanitized_path(module_path);
+    path_sanitizer.StripHomeDirectory(&sanitized_path);
+    suspicious_module->set_path(sanitized_path.AsUTF8Unsafe());
+
+    // Digest.
+    binary_feature_extractor->ExtractDigest(
+        module_path, suspicious_module->mutable_digest());
+
+    // Version.
+    scoped_ptr<FileVersionInfo> version_info(
+        FileVersionInfo::CreateFileVersionInfo(module_path));
+    if (version_info) {
+      base::string16 file_version = version_info->file_version();
+      if (!file_version.empty())
+        suspicious_module->set_version(base::UTF16ToUTF8(file_version));
+    }
+
+    // Signature.
+    binary_feature_extractor->CheckSignature(
+        module_path, suspicious_module->mutable_signature());
+
+    // Image headers.
+    if (!binary_feature_extractor->ExtractImageFeatures(
+            module_path, BinaryFeatureExtractor::kDefaultOptions,
+            suspicious_module->mutable_image_headers(),
+            nullptr /* signed_data */)) {
+      suspicious_module->clear_image_headers();
+    }
+
+    // Send the incident to the reporting service.
+    incident_receiver->AddIncidentForProcess(make_scoped_ptr(
+        new SuspiciousModuleIncident(std::move(suspicious_module))));
+  }
+}
+
+void CheckModuleWhitelistOnIOThread(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
+    scoped_ptr<IncidentReceiver> incident_receiver,
+    scoped_ptr<std::set<ModuleInfo>> module_info_set) {
+  SCOPED_UMA_HISTOGRAM_TIMER("SBIRS.SuspiciousModuleDetectionTime");
+  scoped_ptr<std::set<base::FilePath>> suspicious_paths(
+      new std::set<base::FilePath>);
+
+  base::FilePath file_path;
+  for (const ModuleInfo& module_info : *module_info_set) {
+    file_path = base::FilePath(module_info.name);
+    base::string16 module_file_name(
+        base::i18n::FoldCase(file_path.BaseName().AsUTF16Unsafe()));
+
+    // If not whitelisted.
+    if (!database_manager->MatchModuleWhitelistString(
+            base::UTF16ToUTF8(module_file_name)))
+      suspicious_paths->insert(file_path);
+  }
+
+  UMA_HISTOGRAM_COUNTS("SBIRS.SuspiciousModuleReportCount",
+                       suspicious_paths->size());
+
+  if (!suspicious_paths->empty()) {
+    content::BrowserThread::GetBlockingPool()
+        ->PostWorkerTaskWithShutdownBehavior(
+            FROM_HERE, base::Bind(&ReportIncidentsForSuspiciousModules,
+                                  base::Passed(std::move(suspicious_paths)),
+                                  base::Passed(std::move(incident_receiver))),
+            base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
+  }
+}
+
+}  // namespace
+
+void VerifyModuleLoadState(
+    const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
+    scoped_ptr<IncidentReceiver> incident_receiver) {
+  scoped_ptr<std::set<ModuleInfo>> module_info_set(new std::set<ModuleInfo>);
+  if (!GetLoadedModules(module_info_set.get()))
+    return;
+
+  // PostTaskAndReply doesn't work here because we're in a sequenced blocking
+  // thread pool.
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::Bind(&CheckModuleWhitelistOnIOThread, database_manager,
+                 base::Passed(std::move(incident_receiver)),
+                 base::Passed(std::move(module_info_set))));
+}
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win_unittest.cc
new file mode 100644
index 0000000..3422794
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/module_load_analyzer_win_unittest.cc
@@ -0,0 +1,121 @@
+// 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/safe_browsing/incident_reporting/module_load_analyzer.h"
+
+#include <string>
+
+#include "base/files/file_path.h"
+#include "base/memory/scoped_vector.h"
+#include "base/path_service.h"
+#include "base/run_loop.h"
+#include "base/scoped_native_library.h"
+#include "base/strings/string_util.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident_receiver.h"
+#include "chrome/browser/safe_browsing/incident_reporting/mock_incident_receiver.h"
+#include "chrome/common/safe_browsing/csd.pb.h"
+#include "components/safe_browsing_db/database_manager.h"
+#include "components/safe_browsing_db/test_database_manager.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::Return;
+using ::testing::StrictMock;
+using ::testing::_;
+
+namespace safe_browsing {
+
+namespace {
+
+const char kWhitelistedModuleName[] = "USER32.dll";
+
+const char kNonWhitelistedModuleName[] = "blacklist_test_dll_1.dll";
+
+class MockSafeBrowsingDatabaseManager : public TestSafeBrowsingDatabaseManager {
+ public:
+  MockSafeBrowsingDatabaseManager() {}
+
+  MOCK_METHOD1(MatchModuleWhitelistString, bool(const std::string&));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingDatabaseManager);
+};
+
+class ModuleLoadAnalayzerTest : public testing::Test {
+ protected:
+  ModuleLoadAnalayzerTest()
+      : mock_incident_receiver_(
+            new StrictMock<safe_browsing::MockIncidentReceiver>()),
+        mock_safe_browsing_database_manager_(
+            new MockSafeBrowsingDatabaseManager()) {
+    // Accept all dlls except kNonWhitelistedModuleName.
+    EXPECT_CALL(*mock_safe_browsing_database_manager_,
+                MatchModuleWhitelistString(_))
+        .WillRepeatedly(Return(true));
+  }
+
+  void ExpectIncident(const std::string& module_to_load) {
+    base::FilePath current_dir;
+    ASSERT_TRUE(PathService::Get(base::DIR_EXE, &current_dir));
+    base::ScopedNativeLibrary dll1(current_dir.AppendASCII(module_to_load));
+
+    scoped_ptr<Incident> incident;
+    EXPECT_CALL(*mock_incident_receiver_, DoAddIncidentForProcess(_))
+        .WillOnce(TakeIncident(&incident));
+
+    VerifyModuleLoadState(mock_safe_browsing_database_manager_,
+                          make_scoped_ptr(mock_incident_receiver_));
+
+    base::RunLoop().RunUntilIdle();
+    content::RunAllBlockingPoolTasksUntilIdle();
+
+    ASSERT_TRUE(incident);
+    scoped_ptr<ClientIncidentReport_IncidentData> incident_data =
+        incident->TakePayload();
+    ASSERT_TRUE(incident_data->has_suspicious_module());
+    const ClientIncidentReport_IncidentData_SuspiciousModuleIncident&
+        suspicious_module_incident = incident_data->suspicious_module();
+    EXPECT_TRUE(suspicious_module_incident.has_digest());
+    EXPECT_TRUE(base::EndsWith(suspicious_module_incident.path(),
+                               module_to_load, base::CompareCase::SENSITIVE));
+  }
+
+  void ExpectNoIncident(const std::string& module_to_load) {
+    base::FilePath current_dir;
+    ASSERT_TRUE(PathService::Get(base::DIR_EXE, &current_dir));
+    base::ScopedNativeLibrary dll1(current_dir.AppendASCII(module_to_load));
+
+    EXPECT_CALL(*mock_incident_receiver_, DoAddIncidentForProcess(_)).Times(0);
+
+    VerifyModuleLoadState(mock_safe_browsing_database_manager_,
+                          make_scoped_ptr(mock_incident_receiver_));
+
+    base::RunLoop().RunUntilIdle();
+    content::RunAllBlockingPoolTasksUntilIdle();
+  }
+
+  content::TestBrowserThreadBundle browser_thread_bundle_;
+  StrictMock<safe_browsing::MockIncidentReceiver>* mock_incident_receiver_;
+  scoped_refptr<MockSafeBrowsingDatabaseManager>
+      mock_safe_browsing_database_manager_;
+};
+
+}  // namespace
+
+TEST_F(ModuleLoadAnalayzerTest, TestWhitelistedDLLs) {
+  ExpectNoIncident(kWhitelistedModuleName);
+}
+
+TEST_F(ModuleLoadAnalayzerTest, TestNonWhitelistedDLLs) {
+  EXPECT_CALL(*mock_safe_browsing_database_manager_,
+              MatchModuleWhitelistString(kNonWhitelistedModuleName))
+      .WillOnce(Return(false));
+
+  ExpectIncident(kNonWhitelistedModuleName);
+}
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.cc b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.cc
new file mode 100644
index 0000000..804043b0
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.cc
@@ -0,0 +1,43 @@
+// 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/safe_browsing/incident_reporting/suspicious_module_incident.h"
+
+#include "base/logging.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident_handler_util.h"
+#include "chrome/common/safe_browsing/csd.pb.h"
+
+namespace safe_browsing {
+
+SuspiciousModuleIncident::SuspiciousModuleIncident(
+    scoped_ptr<ClientIncidentReport_IncidentData_SuspiciousModuleIncident>
+        suspicious_module_incident) {
+  DCHECK(suspicious_module_incident);
+  DCHECK(suspicious_module_incident->has_path());
+  payload()->set_allocated_suspicious_module(
+      suspicious_module_incident.release());
+}
+
+SuspiciousModuleIncident::~SuspiciousModuleIncident() {}
+
+IncidentType SuspiciousModuleIncident::GetType() const {
+  return IncidentType::SUSPICIOUS_MODULE;
+}
+
+// Returns the sanitized path of the module.
+std::string SuspiciousModuleIncident::GetKey() const {
+  return payload()->suspicious_module().path();
+}
+
+// Returns a digest computed over the payload.
+uint32_t SuspiciousModuleIncident::ComputeDigest() const {
+  return HashMessage(payload()->suspicious_module());
+}
+
+MinimumProfileConsent SuspiciousModuleIncident::GetMinimumProfileConsent()
+    const {
+  return MinimumProfileConsent::SAFE_BROWSING_EXTENDED_REPORTING_ENABLED;
+}
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.h b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.h
new file mode 100644
index 0000000..a72ed72c
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident.h
@@ -0,0 +1,39 @@
+// 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_SAFE_BROWSING_INCIDENT_REPORTING_SUSPICIOUS_MODULE_INCIDENT_H_
+#define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_SUSPICIOUS_MODULE_INCIDENT_H_
+
+#include <stdint.h>
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/safe_browsing/incident_reporting/incident.h"
+
+namespace safe_browsing {
+
+class ClientIncidentReport_IncidentData_SuspiciousModuleIncident;
+
+// An incident representing a module loaded in Chrome that wasn't in the module
+// whitelist.
+class SuspiciousModuleIncident : public Incident {
+ public:
+  explicit SuspiciousModuleIncident(
+      scoped_ptr<ClientIncidentReport_IncidentData_SuspiciousModuleIncident>
+          suspicious_modules);
+  ~SuspiciousModuleIncident() override;
+
+  // Incident methods:
+  IncidentType GetType() const override;
+  std::string GetKey() const override;
+  uint32_t ComputeDigest() const override;
+  MinimumProfileConsent GetMinimumProfileConsent() const override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SuspiciousModuleIncident);
+};
+
+}  // namespace safe_browsing
+
+#endif  // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_SUSPICIOUS_MODULE_INCIDENT_H_
diff --git a/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident_unittest.cc
new file mode 100644
index 0000000..fea3ab3
--- /dev/null
+++ b/chrome/browser/safe_browsing/incident_reporting/suspicious_module_incident_unittest.cc
@@ -0,0 +1,47 @@
+// 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/safe_browsing/incident_reporting/suspicious_module_incident.h"
+
+#include <utility>
+
+#include "base/memory/scoped_ptr.h"
+#include "chrome/common/safe_browsing/csd.pb.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace safe_browsing {
+
+namespace {
+
+scoped_ptr<Incident> MakeIncident(const char* path) {
+  scoped_ptr<ClientIncidentReport_IncidentData_SuspiciousModuleIncident>
+      incident(new ClientIncidentReport_IncidentData_SuspiciousModuleIncident);
+  incident->set_path(path);
+  return make_scoped_ptr(new SuspiciousModuleIncident(std::move(incident)));
+}
+
+}  // namespace
+
+TEST(SuspiciousModuleIncident, GetType) {
+  ASSERT_EQ(IncidentType::SUSPICIOUS_MODULE, MakeIncident("foo")->GetType());
+}
+
+// Tests that GetKey returns the dll path.
+TEST(SuspiciousModuleIncident, KeyIsPath) {
+  ASSERT_EQ(std::string("foo"), MakeIncident("foo")->GetKey());
+}
+
+// Tests that GetDigest returns the same value for the same incident.
+TEST(SuspiciousModuleIncident, SameIncidentSameDigest) {
+  ASSERT_EQ(MakeIncident("foo")->ComputeDigest(),
+            MakeIncident("foo")->ComputeDigest());
+}
+
+// Tests that GetDigest returns different values for different incidents.
+TEST(SuspiciousModuleIncident, DifferentIncidentDifferentDigest) {
+  ASSERT_NE(MakeIncident("foo")->ComputeDigest(),
+            MakeIncident("bar")->ComputeDigest());
+}
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc
index 2bec85f..0a443b2 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
@@ -66,6 +66,7 @@
 #include "chrome/browser/safe_browsing/incident_reporting/binary_integrity_analyzer.h"
 #include "chrome/browser/safe_browsing/incident_reporting/blacklist_load_analyzer.h"
 #include "chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h"
+#include "chrome/browser/safe_browsing/incident_reporting/module_load_analyzer.h"
 #include "chrome/browser/safe_browsing/incident_reporting/resource_request_detector.h"
 #include "chrome/browser/safe_browsing/incident_reporting/variations_seed_signature_analyzer.h"
 #endif
@@ -379,6 +380,12 @@
     const DelayedAnalysisCallback& callback) {
   incident_service_->RegisterDelayedAnalysisCallback(callback);
 }
+
+void SafeBrowsingService::RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+    const DelayedAnalysisCallback& callback) {
+  incident_service_->RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+      callback);
+}
 #endif
 
 void SafeBrowsingService::AddDownloadManager(
@@ -423,6 +430,7 @@
 #if defined(FULL_SAFE_BROWSING)
   RegisterBinaryIntegrityAnalysis();
   RegisterBlacklistLoadAnalysis();
+  RegisterModuleLoadAnalysis(database_manager_);
   RegisterVariationsSeedSignatureAnalysis();
 #else
   NOTREACHED();
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.h b/chrome/browser/safe_browsing/safe_browsing_service.h
index 4fef81f3..79bd618 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service.h
+++ b/chrome/browser/safe_browsing/safe_browsing_service.h
@@ -155,6 +155,8 @@
   // |callback| will be dropped if the service is not applicable for the
   // process.
   void RegisterDelayedAnalysisCallback(const DelayedAnalysisCallback& callback);
+  void RegisterExtendedReportingOnlyDelayedAnalysisCallback(
+      const DelayedAnalysisCallback& callback);
 #endif
 
   // Adds |download_manager| to the set monitored by safe browsing.
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
index ed2fb73..a42e5f6 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
@@ -63,6 +63,7 @@
 #include "extensions/common/extension_set.h"
 #include "grit/theme_resources.h"
 #import "ui/base/cocoa/cocoa_base_utils.h"
+#import "ui/base/cocoa/nsview_additions.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/image/image.h"
@@ -1041,7 +1042,12 @@
 
   switch (currentState_) {
     case BookmarkBar::SHOW:
-      return chrome::kBookmarkBarHeight;
+      // When on a Retina display, -[ToolbarContrller baseToolbarHeight] reduces
+      // the height of the toolbar by 1pt. In this case the bookmark bar needs
+      // to be 1pt taller to maintain the proper spacing between bookmark icons
+      // and toolbar items. See https://crbug.com/326245 .
+      return [[self view] cr_lineWidth] == 0.5 ? chrome::kBookmarkBarHeight + 1
+                                               : chrome::kBookmarkBarHeight;
     case BookmarkBar::DETACHED:
       return chrome::kNTPBookmarkBarHeight;
     case BookmarkBar::HIDDEN:
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h
index 82dd4ce1..94b9fd9f 100644
--- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h
@@ -79,4 +79,11 @@
   DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenuMac);
 };
 
+// The ChromeSwizzleServicesMenuUpdater filters Services menu items in the
+// contextual menus and elsewhere using swizzling.
+@interface ChromeSwizzleServicesMenuUpdater : NSObject
+// Return filtered entries, for testing.
++ (void)storeFilteredEntriesForTestingInArray:(NSMutableArray*)array;
+@end
+
 #endif  // CHROME_BROWSER_UI_COCOA_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_MAC_H_
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
index dafc7c2a..7dd8730 100644
--- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm
@@ -7,12 +7,15 @@
 #include <utility>
 
 #include "base/compiler_specific.h"
+#include "base/mac/mac_util.h"
+#import "base/mac/scoped_objc_class_swizzler.h"
 #import "base/mac/scoped_sending_event.h"
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/tracked_objects.h"
 #include "chrome/app/chrome_command_ids.h"
+#import "chrome/browser/mac/nsprocessinfo_additions.h"
 #include "chrome/grit/generated_resources.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
@@ -24,6 +27,13 @@
 
 namespace {
 
+IMP g_original_populatemenu_implementation = nullptr;
+
+// |g_filtered_entries_array| is only set during testing (see
+// +[ChromeSwizzleServicesMenuUpdater storeFilteredEntriesForTestingInArray:]).
+// Otherwise it remains nil.
+NSMutableArray* g_filtered_entries_array = nil;
+
 // Retrieves an NSMenuItem which has the specified command_id. This function
 // traverses the given |model| in the depth-first order. When this function
 // finds an item whose command_id is the same as the given |command_id|, it
@@ -51,6 +61,97 @@
 
 }  // namespace
 
+// An AppKit-private class that adds Services items to contextual menus and
+// the application Services menu.
+@interface _NSServicesMenuUpdater : NSObject
+- (void)populateMenu:(NSMenu*)menu
+    withServiceEntries:(NSArray*)entries
+            forDisplay:(BOOL)display;
+@end
+
+// An AppKit-private class representing a Services menu entry.
+@interface _NSServiceEntry : NSObject
+- (NSString*)bundleIdentifier;
+@end
+
+@implementation ChromeSwizzleServicesMenuUpdater
+
+- (void)populateMenu:(NSMenu*)menu
+    withServiceEntries:(NSArray*)entries
+            forDisplay:(BOOL)display {
+  // Create a new service entry array that does not include the redundant
+  // Services vended by Safari.
+  NSMutableArray* remainingEntries = [NSMutableArray array];
+  [g_filtered_entries_array removeAllObjects];
+
+  for (_NSServiceEntry* nextEntry in entries) {
+    if (![[nextEntry bundleIdentifier] isEqualToString:@"com.apple.Safari"]) {
+      [remainingEntries addObject:nextEntry];
+    } else {
+      [g_filtered_entries_array addObject:nextEntry];
+    }
+  }
+
+  // Pass the filtered array along to the _NSServicesMenuUpdater.
+  g_original_populatemenu_implementation(
+      self, _cmd, menu, remainingEntries, display);
+}
+
++ (void)storeFilteredEntriesForTestingInArray:(NSMutableArray*)array {
+  [g_filtered_entries_array release];
+  g_filtered_entries_array = [array retain];
+}
+
++ (void)load {
+  // Swizzling should not happen in renderer processes or on 10.6.
+  if (![[NSProcessInfo processInfo] cr_isMainBrowserOrTestProcess])
+    return;
+
+  // Services filtering does not work on OS X 10.6.
+  if (base::mac::IsOSSnowLeopard())
+    return;
+
+  static dispatch_once_t onceToken;
+  dispatch_once(&onceToken, ^{
+    // Confirm that the AppKit's private _NSServiceEntry class exists. This
+    // class cannot be accessed at link time and is not guaranteed to exist in
+    // past or future AppKits so use NSClassFromString() to locate it. Also
+    // check that the class implements the bundleIdentifier method. The browser
+    // test checks for all of this as well, but the checks here ensure that we
+    // don't crash out in the wild when running on some future version of OS X.
+    // Odds are a developer will be running a newer version of OS X sooner than
+    // the bots - NOTREACHED() will get them to tell us if compatibility breaks.
+    if (![NSClassFromString(@"_NSServiceEntry") instancesRespondToSelector:
+        @selector(bundleIdentifier)]) {
+      NOTREACHED();
+      return;
+    }
+
+    // Perform similar checks on the AppKit's private _NSServicesMenuUpdater
+    // class.
+    SEL targetSelector = @selector(populateMenu:withServiceEntries:forDisplay:);
+    Class targetClass = NSClassFromString(@"_NSServicesMenuUpdater");
+    if (![targetClass instancesRespondToSelector:targetSelector]) {
+      NOTREACHED();
+      return;
+    }
+
+    // Replace the populateMenu:withServiceEntries:forDisplay: method in
+    // _NSServicesMenuUpdater with an implementation that can filter Services
+    // menu entries from contextual menus and elsewhere. Place the swizzler into
+    // a static so that it never goes out of scope, because the scoper's
+    // destructor undoes the swizzling.
+    Class swizzleClass = [ChromeSwizzleServicesMenuUpdater class];
+    CR_DEFINE_STATIC_LOCAL(base::mac::ScopedObjCClassSwizzler,
+                           servicesMenuFilter,
+                           (targetClass, swizzleClass, targetSelector));
+    g_original_populatemenu_implementation =
+        servicesMenuFilter.GetOriginalImplementation();
+  });
+}
+
+@end
+
 // OSX implemenation of the ToolkitDelegate.
 // This simply (re)delegates calls to RVContextMenuMac because they do not
 // have to be componentized.
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm
new file mode 100644
index 0000000..abb844430
--- /dev/null
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm
@@ -0,0 +1,107 @@
+// 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/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h"
+
+#include "base/mac/foundation_util.h"
+#include "base/mac/mac_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/cocoa/browser_window_cocoa.h"
+#include "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field.h"
+#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
+#include "chrome/browser/ui/extensions/application_launch.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/test/test_utils.h"
+#import "testing/gtest_mac.h"
+
+class RenderViewContextMenuMacBrowserTest : public InProcessBrowserTest {
+ public:
+  RenderViewContextMenuMacBrowserTest() {}
+
+ protected:
+  void SetUpOnMainThread() override {
+    filteredItems_.reset([[NSMutableArray alloc] init]);
+    [ChromeSwizzleServicesMenuUpdater
+        storeFilteredEntriesForTestingInArray:filteredItems_];
+
+    // Add a textfield, which we'll use to present a contextual menu for
+    // testing.
+    textField_.reset(
+        [[NSTextField alloc] initWithFrame:NSMakeRect(20, 20, 100, 20)]);
+    [textField_ setStringValue:@"some text"];
+    NSWindow* window = browser()->window()->GetNativeWindow();
+    [[window contentView] addSubview:textField_];
+  }
+
+  void TearDownOnMainThread() override {
+    [textField_ removeFromSuperview];
+    [ChromeSwizzleServicesMenuUpdater
+        storeFilteredEntriesForTestingInArray:nil];
+  }
+
+  base::scoped_nsobject<NSMutableArray> filteredItems_;
+  base::scoped_nsobject<NSTextField> textField_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenuMacBrowserTest);
+};
+
+// Confirm that the private classes used to filter Safari's redundant Services
+// items exist and implement the expected methods, and that the filtering code
+// successfully removes those Services items.
+IN_PROC_BROWSER_TEST_F(RenderViewContextMenuMacBrowserTest, ServicesFiltering) {
+  // Services filtering does not work on Snow Leopard.
+  if (base::mac::IsOSSnowLeopard())
+    return;
+
+  // Confirm that the _NSServicesMenuUpdater class exists and implements the
+  // method we expect it to.
+  Class menuUpdaterClass = NSClassFromString(@"_NSServicesMenuUpdater");
+  EXPECT_TRUE(menuUpdaterClass);
+  EXPECT_TRUE([menuUpdaterClass instancesRespondToSelector:
+      @selector(populateMenu:withServiceEntries:forDisplay:)]);
+
+  // Confirm that the _NSServiceEntry class exists and implements the
+  // method we expect it to.
+  Class serviceEntryClass = NSClassFromString(@"_NSServiceEntry");
+  EXPECT_TRUE(serviceEntryClass);
+  EXPECT_TRUE([serviceEntryClass instancesRespondToSelector:
+      @selector(bundleIdentifier)]);
+
+  // Make the testing textfield the browser window's first responder, in
+  // preparation for the contextual menu we're about to display. Even though the
+  // code to filter Services items lives in render_view_context_menu_mac, it
+  // filters all context menus no matter which control invokes them (as well as
+  // the application Services menu). So to test, we just need a control with a
+  // bit of selected text.
+  NSWindow* window = browser()->window()->GetNativeWindow();
+  [window makeFirstResponder:textField_];
+  [textField_ selectText:nil];
+
+  // Create a contextual menu.
+  base::scoped_nsobject<NSMenu> popupMenu(
+      [[NSMenu alloc] initWithTitle:@"menu"]);
+  [popupMenu addItemWithTitle:@"Menu Item" action:0 keyEquivalent:@""];
+
+  // Arrange to dismiss the contextual menu in the future (to break out of the
+  // upcoming modal loop).
+  dispatch_async(dispatch_get_main_queue(), ^{
+    [popupMenu cancelTrackingWithoutAnimation];
+  });
+
+  // Bring up the contextual menu from the textfield (actually its field
+  // editor).
+  NSView* firstResponder = base::mac::ObjCCast<NSView>([window firstResponder]);
+  [NSMenu popUpContextMenu:popupMenu
+                 withEvent:[NSApp currentEvent]
+                   forView:firstResponder];
+
+  // Confirm that Services items were removed from the contextual menu. This
+  // check was failing on the 10.10 bot, for some reason. Most-important is
+  // making sure it continues to work as OS X evolves.
+  if (base::mac::IsOSElCapitanOrLater())
+    EXPECT_LT(0LU, [filteredItems_ count]);
+}
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
index 5ab43bd..f62a34c 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
@@ -61,6 +61,7 @@
 #include "grit/components_strings.h"
 #include "grit/theme_resources.h"
 #import "ui/base/cocoa/menu_controller.h"
+#import "ui/base/cocoa/nsview_additions.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 #include "ui/gfx/geometry/rect.h"
@@ -75,9 +76,6 @@
 // Duration of the toolbar animation.
 const NSTimeInterval kToolBarAnimationDuration = 0.12;
 
-// Height of the toolbar in pixels when the bookmark bar is closed.
-const CGFloat kBaseToolbarHeightNormal = 35.0;
-
 // Height of the location bar. Used for animating the toolbar in and out when
 // the location bar is displayed stand-alone for bookmark apps.
 const CGFloat kLocationBarHeight = 29.0;
@@ -328,6 +326,15 @@
                                                 profile_, browser_));
   [locationBar_ setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
 
+  // Adjust the toolbar height if running on Retina - see the comment in
+  // -baseToolbarHeight.
+  CGFloat toolbarHeight = [self baseToolbarHeight];
+  NSRect toolbarFrame = [[locationBar_ superview] frame];
+  if (toolbarFrame.size.height != toolbarHeight) {
+    toolbarFrame.size.height = toolbarHeight;
+    [[locationBar_ superview] setFrame:toolbarFrame];
+  }
+
   // Register pref observers for the optional home and page/options buttons
   // and then add them to the toolbar based on those prefs.
   PrefService* prefs = profile_->GetPrefs();
@@ -900,12 +907,28 @@
   return locationBarView_->GetTranslateBubblePoint();
 }
 
+- (CGFloat)baseToolbarHeight {
+  // Height of the toolbar in pixels when the bookmark bar is closed.
+  const CGFloat baseToolbarHeightNormal = 35.0;
+
+  // Not all lines are drawn at 2x normal height when running on Retina, which
+  // causes the toolbar controls to be visually 1pt too high within the toolbar
+  // area. It's not possible to adjust the control y-positions by 0.5pt and have
+  // them appear 0.5pt lower (they are still drawn at their original locations),
+  // so instead shave off 1pt from the bottom of the toolbar. Note that there's
+  // an offsetting change in -[BookmarkBarController preferredHeight] to
+  // maintain the proper spacing between bookmark icons and toolbar items. See
+  // https://crbug.com/326245 .
+  return [[self view] cr_lineWidth] == 0.5 ? baseToolbarHeightNormal - 1
+                                           : baseToolbarHeightNormal;
+}
+
 - (CGFloat)desiredHeightForCompression:(CGFloat)compressByHeight {
   // With no toolbar, just ignore the compression.
   if (!hasToolbar_)
     return NSHeight([locationBar_ frame]);
 
-  return kBaseToolbarHeightNormal - compressByHeight;
+  return [self baseToolbarHeight] - compressByHeight;
 }
 
 - (void)setDividerOpacity:(CGFloat)opacity {
diff --git a/chrome/browser/ui/views/desktop_media_picker_views.cc b/chrome/browser/ui/views/desktop_media_picker_views.cc
index a87cd56e..cfa7b0f 100644
--- a/chrome/browser/ui/views/desktop_media_picker_views.cc
+++ b/chrome/browser/ui/views/desktop_media_picker_views.cc
@@ -523,8 +523,7 @@
                        audio_share_checkbox_->enabled() &&
                        audio_share_checkbox_->checked();
 
-  // TYPE_WEB_CONTENTS/tab is not fully supported yet.
-  if (parent_ && source.type != DesktopMediaID::TYPE_WEB_CONTENTS)
+  if (parent_)
     parent_->NotifyDialogResult(source);
 
   // Return true to close the window.
@@ -549,7 +548,8 @@
     if (selection)
       source = selection->source_id();
 
-    if (source.type == DesktopMediaID::TYPE_SCREEN) {
+    if (source.type == DesktopMediaID::TYPE_SCREEN ||
+        source.type == DesktopMediaID::TYPE_WEB_CONTENTS) {
       audio_share_checkbox_->SetEnabled(true);
       audio_share_checkbox_->SetTooltipText(base::string16());
     } else if (source.type == DesktopMediaID::TYPE_WINDOW) {
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
index 62890457..a223179 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
@@ -226,19 +226,19 @@
 
 const char kResponseRegisterStart[] = "{"
     "     \"action\": \"start\","
-    "     \"user\": \"user@host.com\""
+    "     \"user\": \"user@consumer.example.com\""
     "}";
 
 const char kResponseRegisterClaimTokenNoConfirm[] = "{"
     "    \"action\": \"getClaimToken\","
-    "    \"user\": \"user@host.com\","
+    "    \"user\": \"user@consumer.example.com\","
     "    \"error\": \"pending_user_action\","
     "    \"timeout\": 1"
     "}";
 
 const char kResponseRegisterClaimTokenConfirm[] = "{"
     "    \"action\": \"getClaimToken\","
-    "    \"user\": \"user@host.com\","
+    "    \"user\": \"user@consumer.example.com\","
     "    \"token\": \"MySampleToken\","
     "    \"claim_url\": \"http://someurl.com/\""
     "}";
@@ -247,7 +247,7 @@
 
 const char kResponseRegisterComplete[] = "{"
     "    \"action\": \"complete\","
-    "    \"user\": \"user@host.com\","
+    "    \"user\": \"user@consumer.example.com\","
     "    \"device_id\": \"my_id\""
     "}";
 
@@ -264,20 +264,22 @@
 const char kURLInfo[] = "http://1.2.3.4:8888/privet/info";
 
 const char kURLRegisterStart[] =
-    "http://1.2.3.4:8888/privet/register?action=start&user=user%40host.com";
+    "http://1.2.3.4:8888/privet/register?action=start&"
+    "user=user%40consumer.example.com";
 
 const char kURLRegisterClaimToken[] =
     "http://1.2.3.4:8888/privet/register?action=getClaimToken&"
-    "user=user%40host.com";
+    "user=user%40consumer.example.com";
 
 const char kURLCloudPrintConfirm[] =
     "https://www.google.com/cloudprint/confirm?token=MySampleToken";
 
 const char kURLRegisterComplete[] =
-    "http://1.2.3.4:8888/privet/register?action=complete&user=user%40host.com";
+    "http://1.2.3.4:8888/privet/register?action=complete&"
+    "user=user%40consumer.example.com";
 
 const char kSampleGaiaId[] = "12345";
-const char kSampleUser[] = "user@host.com";
+const char kSampleUser[] = "user@consumer.example.com";
 
 class TestMessageLoopCondition {
  public:
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
index 7fa7f2a..336dbe1e 100644
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
@@ -64,15 +64,27 @@
     "media_router.ui.onCreateRouteResponseReceived";
 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData";
 const char kSetIssue[] = "media_router.ui.setIssue";
-const char kSetSinkList[] = "media_router.ui.setSinkList";
+const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity";
 const char kSetRouteList[] = "media_router.ui.setRouteList";
 const char kSetCastModeList[] = "media_router.ui.setCastModeList";
 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight";
 const char kWindowOpen[] = "window.open";
 
-scoped_ptr<base::ListValue> SinksToValue(
-    const std::vector<MediaSinkWithCastModes>& sinks) {
-  scoped_ptr<base::ListValue> value(new base::ListValue);
+scoped_ptr<base::DictionaryValue> SinksAndIdentityToValue(
+    const std::vector<MediaSinkWithCastModes>& sinks,
+    const AccountInfo& account_info) {
+  scoped_ptr<base::DictionaryValue> sink_list_and_identity(
+      new base::DictionaryValue);
+  bool show_email = false;
+  bool show_domain = false;
+  std::string user_domain;
+  if (account_info.IsValid()) {
+    user_domain = account_info.hosted_domain;
+    sink_list_and_identity->SetString("userEmail", account_info.email);
+    sink_list_and_identity->SetString("userDomain", user_domain);
+  }
+
+  scoped_ptr<base::ListValue> sinks_val(new base::ListValue);
 
   for (const MediaSinkWithCastModes& sink_with_cast_modes : sinks) {
     scoped_ptr<base::DictionaryValue> sink_val(new base::DictionaryValue);
@@ -83,18 +95,37 @@
     sink_val->SetInteger("iconType", sink.icon_type());
     if (!sink.description().empty())
       sink_val->SetString("description", sink.description());
-    if (!sink.domain().empty())
-      sink_val->SetString("domain", sink.domain());
+
+    if (!user_domain.empty() && !sink.domain().empty()) {
+      std::string domain = sink.domain();
+      // Convert default domains to user domain
+      if (sink.domain() == "default") {
+        domain = user_domain;
+        if (domain == "NO_HOSTED_DOMAIN") {
+          // Default domain will be empty for non-dasher accounts.
+          domain.clear();
+        }
+      }
+
+      sink_val->SetString("domain", domain);
+
+      show_email = true;
+      if (!domain.empty() && domain != user_domain)
+        show_domain = true;
+    }
 
     int cast_mode_bits = 0;
     for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes)
       cast_mode_bits |= cast_mode;
 
     sink_val->SetInteger("castModes", cast_mode_bits);
-    value->Append(sink_val.release());
+    sinks_val->Append(sink_val.release());
   }
 
-  return value;
+  sink_list_and_identity->Set("sinks", sinks_val.release());
+  sink_list_and_identity->SetBoolean("showEmail", show_email);
+  sink_list_and_identity->SetBoolean("showDomain", show_domain);
+  return sink_list_and_identity;
 }
 
 scoped_ptr<base::DictionaryValue> RouteToValue(
@@ -208,8 +239,10 @@
 void MediaRouterWebUIMessageHandler::UpdateSinks(
     const std::vector<MediaSinkWithCastModes>& sinks) {
   DVLOG(2) << "UpdateSinks";
-  scoped_ptr<base::ListValue> sinks_val(SinksToValue(sinks));
-  web_ui()->CallJavascriptFunction(kSetSinkList, *sinks_val);
+  scoped_ptr<base::DictionaryValue> sinks_and_identity_val(
+      SinksAndIdentityToValue(sinks, GetAccountInfo()));
+  web_ui()->CallJavascriptFunction(kSetSinkListAndIdentity,
+                                   *sinks_and_identity_val);
 }
 
 void MediaRouterWebUIMessageHandler::UpdateRoutes(
@@ -343,8 +376,9 @@
   initial_data.SetString("deviceMissingUrl",
       base::StringPrintf(kHelpPageUrlPrefix, 3249268));
 
-  scoped_ptr<base::ListValue> sinks(SinksToValue(media_router_ui_->sinks()));
-  initial_data.Set("sinks", sinks.release());
+  scoped_ptr<base::DictionaryValue> sinks_and_identity(
+      SinksAndIdentityToValue(media_router_ui_->sinks(), GetAccountInfo()));
+  initial_data.Set("sinksAndIdentity", sinks_and_identity.release());
 
   scoped_ptr<base::ListValue> routes(RoutesToValue(media_router_ui_->routes(),
       media_router_ui_->joinable_route_ids(),
@@ -427,10 +461,10 @@
     return;
   }
 
-  Profile::FromWebUI(web_ui())->GetPrefs()->SetBoolean(
-      prefs::kMediaRouterEnableCloudServices, enabled_cloud_services);
-  Profile::FromWebUI(web_ui())->GetPrefs()->SetBoolean(
-      prefs::kMediaRouterCloudServicesPrefSet, true);
+  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
+  pref_service->SetBoolean(prefs::kMediaRouterEnableCloudServices,
+                           enabled_cloud_services);
+  pref_service->SetBoolean(prefs::kMediaRouterCloudServicesPrefSet, true);
 #endif  // defined(GOOGLE_CHROME_BUILD)
 }
 
@@ -720,6 +754,16 @@
   web_ui()->CallJavascriptFunction(kSetFirstRunFlowData, first_run_flow_data);
 }
 
+AccountInfo MediaRouterWebUIMessageHandler::GetAccountInfo() {
+#if defined(GOOGLE_CHROME_BUILD)
+  SigninManagerBase* signin_manager =
+      SigninManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()));
+  return signin_manager->GetAuthenticatedAccountInfo();
+#else
+  return AccountInfo();
+#endif  // defined(GOOGLE_CHROME_BUILD)
+}
+
 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) {
   set_web_ui(web_ui);
 }
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
index b18009e2..92313fb 100644
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
+++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
@@ -11,6 +11,7 @@
 #include "chrome/browser/media/router/issue.h"
 #include "chrome/browser/ui/webui/media_router/media_cast_mode.h"
 #include "chrome/browser/ui/webui/media_router/media_sink_with_cast_modes.h"
+#include "components/signin/core/browser/account_info.h"
 #include "content/public/browser/web_ui_message_handler.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -89,6 +90,11 @@
   // initializing the WebUI.
   void MaybeUpdateFirstRunFlowData();
 
+  // Retrieve the account info for email and domain of signed in users. This is
+  // used when updating sinks to determine if identity should be displayed.
+  // Marked virtual for tests.
+  virtual AccountInfo GetAccountInfo();
+
   // Keeps track of whether a command to close the dialog has been issued.
   bool dialog_closing_;
 
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
index 85ce69a..f0066f12 100644
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
@@ -21,6 +21,8 @@
 
 const char kProviderExtensionIdForTesting[] = "test_id";
 const char kControllerPathForTesting[] = "test_path";
+const std::string kUserEmailForTesting = "nobody@example.com";
+const std::string kUserDomainForTesting = "example.com";
 
 class MockMediaRouterUI : public MediaRouterUI {
  public:
@@ -31,6 +33,36 @@
   MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&());
 };
 
+class TestMediaRouterWebUIMessageHandler
+    : public MediaRouterWebUIMessageHandler {
+ public:
+  explicit TestMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui)
+      : MediaRouterWebUIMessageHandler(media_router_ui),
+        email_(kUserEmailForTesting),
+        domain_(kUserDomainForTesting) {}
+  ~TestMediaRouterWebUIMessageHandler() override = default;
+
+  AccountInfo GetAccountInfo() override {
+    AccountInfo info = AccountInfo();
+    info.account_id = info.gaia = info.email = email_;
+    info.hosted_domain = domain_;
+    info.full_name = info.given_name = "name";
+    info.locale = "locale";
+    info.picture_url = "picture";
+
+    return info;
+  }
+
+  void SetEmailAndDomain(const std::string& email, const std::string& domain) {
+    email_ = email;
+    domain_ = domain;
+  }
+
+ private:
+  std::string email_;
+  std::string domain_;
+};
+
 class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest {
  public:
   MediaRouterWebUIMessageHandlerTest()
@@ -46,7 +78,7 @@
         browser()->tab_strip_model()->GetActiveWebContents());
     mock_media_router_ui_.reset(new MockMediaRouterUI(web_ui_.get()));
     handler_.reset(
-        new MediaRouterWebUIMessageHandler(mock_media_router_ui_.get()));
+        new TestMediaRouterWebUIMessageHandler(mock_media_router_ui_.get()));
     handler_->SetWebUIForTest(web_ui_.get());
   }
 
@@ -64,7 +96,7 @@
  protected:
   scoped_ptr<content::TestWebUI> web_ui_;
   scoped_ptr<MockMediaRouterUI> mock_media_router_ui_;
-  scoped_ptr<MediaRouterWebUIMessageHandler> handler_;
+  scoped_ptr<TestMediaRouterWebUIMessageHandler> handler_;
   const std::string provider_extension_id_;
 };
 
@@ -81,10 +113,28 @@
   handler_->UpdateSinks(media_sink_with_cast_modes_list);
   EXPECT_EQ(1u, web_ui_->call_data().size());
   const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
-  EXPECT_EQ("media_router.ui.setSinkList", call_data.function_name());
+  EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
+            call_data.function_name());
   const base::Value* arg1 = call_data.arg1();
+  const base::DictionaryValue* sinks_with_identity_value = nullptr;
+  ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+
+  // Email is not displayed if there is no sinks with domain.
+  bool show_email = false;
+  bool actual_show_email = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
+  EXPECT_EQ(show_email, actual_show_email);
+
+  // Domain is not displayed if there is no sinks with domain.
+  bool show_domain = false;
+  bool actual_show_domain = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
+  EXPECT_EQ(show_domain, actual_show_domain);
+
   const base::ListValue* sinks_list_value = nullptr;
-  ASSERT_TRUE(arg1->GetAsList(&sinks_list_value));
+  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
   const base::DictionaryValue* sink_value = nullptr;
   ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
 
@@ -100,6 +150,170 @@
   EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR), cast_mode_bits);
 }
 
+#if defined(GOOGLE_CHROME_BUILD)
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentity) {
+  MediaSink::Id sink_id("sinkId123");
+  std::string sink_name("The sink");
+
+  std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
+  MediaSinkWithCastModes media_sink_with_cast_modes(
+      MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+  media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
+  media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
+  media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
+
+  handler_->UpdateSinks(media_sink_with_cast_modes_list);
+  EXPECT_EQ(1u, web_ui_->call_data().size());
+  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+  EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
+            call_data.function_name());
+  const base::Value* arg1 = call_data.arg1();
+  const base::DictionaryValue* sinks_with_identity_value = nullptr;
+  ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+
+  bool show_email = true;
+  bool actual_show_email = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
+  EXPECT_EQ(show_email, actual_show_email);
+
+  // Sink domain is not displayed if it matches user domain.
+  bool show_domain = false;
+  bool actual_show_domain = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
+  EXPECT_EQ(show_domain, actual_show_domain);
+
+  std::string value;
+  EXPECT_TRUE(sinks_with_identity_value->GetString("userEmail", &value));
+  EXPECT_EQ(kUserEmailForTesting, value);
+
+  EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
+  EXPECT_EQ(kUserDomainForTesting, value);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) {
+  MediaSink::Id sink_id("sinkId123");
+  std::string sink_name("The sink");
+  std::string domain_name("google.com");
+
+  std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
+  MediaSinkWithCastModes media_sink_with_cast_modes(
+      MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+  media_sink_with_cast_modes.sink.set_domain(domain_name);
+  media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
+  media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
+
+  handler_->UpdateSinks(media_sink_with_cast_modes_list);
+  EXPECT_EQ(1u, web_ui_->call_data().size());
+  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+  EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
+            call_data.function_name());
+  const base::Value* arg1 = call_data.arg1();
+  const base::DictionaryValue* sinks_with_identity_value = nullptr;
+  ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+
+  // Domain is displayed for sinks with domains that are not the user domain.
+  bool show_domain = true;
+  bool actual_show_domain = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
+  EXPECT_EQ(show_domain, actual_show_domain);
+
+  std::string value;
+  EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
+  EXPECT_EQ(kUserDomainForTesting, value);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) {
+  MediaSink::Id sink_id("sinkId123");
+  std::string sink_name("The sink");
+  std::string user_email("nobody@gmail.com");
+  std::string user_domain("NO_HOSTED_DOMAIN");
+  std::string domain_name("default");
+
+  handler_->SetEmailAndDomain(user_email, user_domain);
+
+  std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
+  MediaSinkWithCastModes media_sink_with_cast_modes(
+      MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+  media_sink_with_cast_modes.sink.set_domain(domain_name);
+  media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
+  media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
+
+  handler_->UpdateSinks(media_sink_with_cast_modes_list);
+  EXPECT_EQ(1u, web_ui_->call_data().size());
+  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+  EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
+            call_data.function_name());
+  const base::Value* arg1 = call_data.arg1();
+  const base::DictionaryValue* sinks_with_identity_value = nullptr;
+  ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+
+  const base::ListValue* sinks_list_value = nullptr;
+  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
+  const base::DictionaryValue* sink_value = nullptr;
+  ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
+
+  // Domain should not be shown if there were only default sink domains.
+  bool show_domain = false;
+  bool actual_show_domain = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
+  EXPECT_EQ(show_domain, actual_show_domain);
+
+  // Sink domain should be empty if user has no hosted domain.
+  std::string value;
+  EXPECT_TRUE(sink_value->GetString("domain", &value));
+  EXPECT_EQ(std::string(), value);
+
+  EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
+  EXPECT_EQ(user_domain, value);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) {
+  MediaSink::Id sink_id("sinkId123");
+  std::string sink_name("The sink");
+  std::string domain_name("default");
+
+  std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
+  MediaSinkWithCastModes media_sink_with_cast_modes(
+      MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+  media_sink_with_cast_modes.sink.set_domain(domain_name);
+  media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
+  media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
+
+  handler_->UpdateSinks(media_sink_with_cast_modes_list);
+  EXPECT_EQ(1u, web_ui_->call_data().size());
+  const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+  EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
+            call_data.function_name());
+  const base::Value* arg1 = call_data.arg1();
+  const base::DictionaryValue* sinks_with_identity_value = nullptr;
+  ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+
+  const base::ListValue* sinks_list_value = nullptr;
+  ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
+  const base::DictionaryValue* sink_value = nullptr;
+  ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
+
+  // Domain should not be shown if there were only default sink domains.
+  bool show_domain = false;
+  bool actual_show_domain = false;
+  EXPECT_TRUE(
+      sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
+  EXPECT_EQ(show_domain, actual_show_domain);
+
+  std::string value;
+  EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
+  EXPECT_EQ(kUserDomainForTesting, value);
+
+  // Sink domain should be updated from 'default' to user domain.
+  EXPECT_TRUE(sink_value->GetString("domain", &value));
+  EXPECT_EQ(kUserDomainForTesting, value);
+}
+#endif  // defined(GOOGLE_CHROME_BUILD)
+
 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) {
   MediaRoute::Id route_id("routeId123");
   MediaSink::Id sink_id("sinkId123");
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index 67daffd..f568688c 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -243,8 +243,13 @@
   source->AddString(
       "noDestsPromoLearnMoreUrl",
       chrome::kCloudPrintNoDestinationsLearnMoreURL);
-  source->AddLocalizedString("pageRangeInstruction",
-                             IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION);
+  source->AddLocalizedString("pageRangeLimitInstruction",
+                             IDS_PRINT_PREVIEW_PAGE_RANGE_LIMIT_INSTRUCTION);
+  source->AddLocalizedString(
+      "pageRangeLimitInstructionWithValue",
+      IDS_PRINT_PREVIEW_PAGE_RANGE_LIMIT_INSTRUCTION_WITH_VALUE);
+  source->AddLocalizedString("pageRangeSyntaxInstruction",
+                             IDS_PRINT_PREVIEW_PAGE_RANGE_SYNTAX_INSTRUCTION);
   source->AddLocalizedString("copiesInstruction",
                              IDS_PRINT_PREVIEW_COPIES_INSTRUCTION);
   source->AddLocalizedString("incrementTitle",
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 5dfafa9..4facce93b 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -338,6 +338,8 @@
       'browser/mac/mac_startup_profiler.h',
       'browser/mac/master_prefs.h',
       'browser/mac/master_prefs.mm',
+      'browser/mac/nsprocessinfo_additions.h',
+      'browser/mac/nsprocessinfo_additions.mm',
       'browser/mac/relauncher.cc',
       'browser/mac/relauncher.h',
       'browser/mac/security_wrappers.cc',
@@ -837,6 +839,8 @@
       'browser/android/ntp_snippets_bridge.h',
       'browser/android/ntp_snippets_controller.cc',
       'browser/android/ntp_snippets_controller.h',
+      'browser/android/ntp_snippets_launcher.cc',
+      'browser/android/ntp_snippets_launcher.h',
       'browser/android/omnibox/answers_image_bridge.cc',
       'browser/android/omnibox/answers_image_bridge.h',
       'browser/android/omnibox/autocomplete_controller_android.cc',
@@ -1891,6 +1895,7 @@
       'android/java/src/org/chromium/chrome/browser/ntp/RecentlyClosedBridge.java',
       'android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java',
       'android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java',
+      'android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java',
       'android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java',
       'android/java/src/org/chromium/chrome/browser/omnibox/AnswersImage.java',
       'android/java/src/org/chromium/chrome/browser/omnibox/AutocompleteController.java',
@@ -2614,6 +2619,9 @@
       'browser/safe_browsing/incident_reporting/last_download_finder.h',
       'browser/safe_browsing/incident_reporting/module_integrity_verifier_win.cc',
       'browser/safe_browsing/incident_reporting/module_integrity_verifier_win.h',
+      'browser/safe_browsing/incident_reporting/module_load_analyzer.cc',
+      'browser/safe_browsing/incident_reporting/module_load_analyzer.h',
+      'browser/safe_browsing/incident_reporting/module_load_analyzer_win.cc',
       'browser/safe_browsing/incident_reporting/off_domain_inclusion_detector.cc',
       'browser/safe_browsing/incident_reporting/off_domain_inclusion_detector.h',
       'browser/safe_browsing/incident_reporting/platform_state_store.cc',
@@ -2627,6 +2635,8 @@
       'browser/safe_browsing/incident_reporting/resource_request_incident.h',
       'browser/safe_browsing/incident_reporting/state_store.cc',
       'browser/safe_browsing/incident_reporting/state_store.h',
+      'browser/safe_browsing/incident_reporting/suspicious_module_incident.cc',
+      'browser/safe_browsing/incident_reporting/suspicious_module_incident.h',
       'browser/safe_browsing/incident_reporting/tracked_preference_incident.cc',
       'browser/safe_browsing/incident_reporting/tracked_preference_incident.h',
       'browser/safe_browsing/incident_reporting/variations_seed_signature_analyzer.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 64fabe1..fe254c1b 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -609,6 +609,7 @@
       'browser/ui/cocoa/one_click_signin_dialog_controller_browsertest.mm',
       'browser/ui/cocoa/passwords/passwords_bubble_browsertest.mm',
       'browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller_browsertest.mm',
+      'browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_browsertest.mm',
       'browser/ui/cocoa/ssl_client_certificate_selector_cocoa_browsertest.mm',
       'browser/ui/cocoa/view_id_util_browsertest.mm',
       'browser/ui/cocoa/web_contents_modal_dialog_manager_views_mac_browsertest.mm',
@@ -2151,6 +2152,8 @@
         '../components/components.gyp:ui_zoom_test_support',
         '../components/components_resources.gyp:components_resources',
         '../components/components_strings.gyp:components_strings',
+        '../content/content.gyp:common_features',
+        '../content/content.gyp:feature_h264_with_openh264_ffmpeg',
         '../content/content_shell_and_tests.gyp:content_browser_test_base',
         '../crypto/crypto.gyp:crypto_test_support',
         '../device/bluetooth/bluetooth.gyp:device_bluetooth_mocks',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 3be1264..2630524 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -782,12 +782,14 @@
       'browser/safe_browsing/incident_reporting/module_integrity_unittest_util_win.cc',
       'browser/safe_browsing/incident_reporting/module_integrity_unittest_util_win.h',
       'browser/safe_browsing/incident_reporting/module_integrity_verifier_win_unittest.cc',
+      'browser/safe_browsing/incident_reporting/module_load_analyzer_win_unittest.cc',
       'browser/safe_browsing/incident_reporting/off_domain_inclusion_detector_unittest.cc',
       'browser/safe_browsing/incident_reporting/platform_state_store_unittest.cc',
       'browser/safe_browsing/incident_reporting/platform_state_store_win_unittest.cc',
       'browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc',
       'browser/safe_browsing/incident_reporting/resource_request_detector_unittest.cc',
       'browser/safe_browsing/incident_reporting/state_store_unittest.cc',
+      'browser/safe_browsing/incident_reporting/suspicious_module_incident_unittest.cc',
       'browser/safe_browsing/incident_reporting/tracked_preference_incident_unittest.cc',
       'browser/safe_browsing/incident_reporting/variations_seed_signature_incident_unittest.cc',
       'browser/safe_browsing/local_database_manager_unittest.cc',
diff --git a/chrome/common/safe_browsing/csd.proto b/chrome/common/safe_browsing/csd.proto
index a9460f3c..1b3f3b6 100644
--- a/chrome/common/safe_browsing/csd.proto
+++ b/chrome/common/safe_browsing/csd.proto
@@ -489,6 +489,13 @@
       optional string origin = 2;
       optional Type type = 3 [default = UNKNOWN];
     }
+    message SuspiciousModuleIncident {
+      optional string path = 1;
+      optional ClientDownloadRequest.Digests digest = 2;
+      optional string version = 3;
+      optional ClientDownloadRequest.SignatureInfo signature = 4;
+      optional ClientDownloadRequest.ImageHeaders image_headers = 5;
+    }
     optional int64 incident_time_msec = 1;
     optional TrackedPreferenceIncident tracked_preference = 2;
     optional BinaryIntegrityIncident binary_integrity = 3;
@@ -496,6 +503,7 @@
     // Note: skip tag 5 because it was previously used.
     optional VariationsSeedSignatureIncident variations_seed_signature = 6;
     optional ResourceRequestIncident resource_request = 7;
+    optional SuspiciousModuleIncident suspicious_module = 8;
   }
 
   repeated IncidentData incident = 1;
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index da5984af..137558e 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -876,6 +876,7 @@
       "//components/safe_browsing_db:test_database_manager",
       "//components/strings",
       "//components/translate/core/common",
+      "//content/public/common:features",
       "//content/test:browsertest_base",
       "//crypto:platform",
       "//crypto:test_support",
@@ -1087,7 +1088,9 @@
     if (enable_captive_portal_detection) {
       sources += [ "../browser/captive_portal/captive_portal_browsertest.cc" ]
     }
-    if (!enable_webrtc) {
+    if (enable_webrtc) {
+      deps += [ "//content/public/common:feature_h264_with_openh264_ffmpeg" ]
+    } else {
       sources -= [
         "../browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc",
         "../browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc",
diff --git a/chrome/test/data/webui/media_router/media_router_container_tests.js b/chrome/test/data/webui/media_router/media_router_container_tests.js
index 7e8a41b..2dd9582 100644
--- a/chrome/test/data/webui/media_router/media_router_container_tests.js
+++ b/chrome/test/data/webui/media_router/media_router_container_tests.js
@@ -400,6 +400,8 @@
                 media_router.SinkStatus.ACTIVE, [1, 2, 3]),
         ];
 
+        container.showDomain = true;
+
         setTimeout(function() {
           var sinkList =
               container.$['sink-list'].querySelectorAll('paper-item');
@@ -416,6 +418,37 @@
         });
       });
 
+      // Tests that domain text is not shown when |showDomain| is false.
+      test('sink with domain text', function(done) {
+        // Sink 1 - sink, no domain -> text = name
+        // Sink 2 - sink, domain -> text = sink + domain
+        container.allSinks = [
+            new media_router.Sink('sink id 1', 'Sink 1', null, null,
+                media_router.SinkIconType.HANGOUT,
+                media_router.SinkStatus.ACTIVE, [1, 2, 3]),
+            new media_router.Sink('sink id 2', 'Sink 2',
+                null, 'example.com',
+                media_router.SinkIconType.HANGOUT,
+                media_router.SinkStatus.ACTIVE, [1, 2, 3]),
+        ];
+
+        container.showDomain = false;
+
+        setTimeout(function() {
+          var sinkList =
+              container.$['sink-list'].querySelectorAll('paper-item');
+          assertEquals(2, sinkList.length);
+
+          // |sinkList[0]| has sink name only.
+          checkElementText(container.allSinks[0].name, sinkList[0]);
+          // |sinkList[1]| has sink name but domain should be hidden.
+          checkElementText(container.allSinks[1].name, sinkList[1]);
+          assertTrue(sinkList[1].textContent.trim().indexOf(
+              container.allSinks[1].domain.trim()) == -1);
+          done();
+        });
+      });
+
       // Tests the text shown for the sink list.
       test('initial sink list route text', function(done) {
         // Sink 1 - no sink description, no route -> no subtext
@@ -513,7 +546,7 @@
                                       'container-header',
                                       'device-missing']);
 
-          // Sc.et a non-blocking issue. The issue should stay hidden.
+          // Set a non-blocking issue. The issue should stay hidden.
           container.issue = fakeNonBlockingIssue;
           setTimeout(function() {
             checkElementsVisibleWithId(['cast-mode-list',
diff --git a/chrome/test/data/webui/media_router/media_router_header_tests.js b/chrome/test/data/webui/media_router/media_router_header_tests.js
index f82ef68..ab3a657 100644
--- a/chrome/test/data/webui/media_router/media_router_header_tests.js
+++ b/chrome/test/data/webui/media_router/media_router_header_tests.js
@@ -20,7 +20,8 @@
         'arrow-drop-icon',
         'back-button',
         'close-button',
-        'header-text'
+        'header-text',
+        'user-email-container',
       ];
 
       // Checks whether the current icon matches the icon used for the view.
@@ -30,8 +31,10 @@
       };
 
       // Checks whether |element| is hidden.
+      // An element is considered hidden if it does not exist (e.g. unstamped)
+      // or its |hidden| property is |false|.
       var checkElementHidden = function(hidden, element) {
-        assertEquals(hidden, element.hidden);
+        assertEquals(hidden, !element || element.hidden);
       };
 
       // Checks whether the elements specified in |elementIdList| are visible.
@@ -46,18 +49,24 @@
         }
       };
 
+      // Checks whether |expected| and the text in the |element| are equal.
+      var checkElementText = function(expected, element) {
+        assertEquals(expected.trim(), element.textContent.trim());
+      };
+
       // Import media_router_header.html before running suite.
       suiteSetup(function() {
         return PolymerTest.importHtml(
-            'chrome://media-router/elements/media_router_header/' +
-            'media_router_header.html');
+            'chrome://media-router/elements/media_router_container/' +
+            'media_router_container.html');
       });
 
       // Initialize an media-router-header before each test.
       setup(function(done) {
         PolymerTest.clearBody();
-        header = document.createElement('media-router-header');
-        document.body.appendChild(header);
+        container = document.createElement('media-router-container');
+        document.body.appendChild(container);
+        header = container.$['container-header'];
 
         // Allow for the media router header to be created and attached.
         setTimeout(done);
@@ -137,6 +146,16 @@
         done();
       });
 
+      // Tests for 'header-height-changed' event firing when the header changes
+      // if email is shown.
+      test('header height changed with email shown', function(done) {
+        header.addEventListener('header-height-changed', function() {
+          done();
+        });
+        header.userEmail = 'user@example.com';
+        header.showEmail = true;
+      });
+
       // Tests the |computeArrowDropIcon_| function.
       test('compute arrow drop icon', function() {
         assertEquals('arrow-drop-up',
@@ -181,6 +200,34 @@
                                     'close-button',
                                     'header-text']);
       });
+
+      // Verify email is shown and header updated if showEmail is true.
+      test('visibility and style of UI depending on email', function(done) {
+        header.userEmail = 'user@example.com';
+        header.showEmail = true;
+        setTimeout(function() {
+          assertEquals(header.headerWithEmailHeight_, header.offsetHeight)
+
+          assertFalse(header.$$('#user-email-container').hidden);
+          checkElementText(
+              header.userEmail,
+              header.$$('#user-email-container'));
+          done();
+        });
+      });
+
+      // Verify no email is shown and header is not modified if email is empty.
+      test('visibility and style of UI for empty email', function(done) {
+        header.userEmail = undefined;
+        header.showEmail = true;
+        setTimeout(function() {
+          assertNotEquals(header.headerWithEmailHeight_, header.offsetHeight)
+          checkElementText(
+              '',
+              header.$$('#user-email-container'));
+          done();
+        });
+      });
     });
   }
 
diff --git a/chromeos/chromeos_switches.cc b/chromeos/chromeos_switches.cc
index 249cfab..afb9b83f 100644
--- a/chromeos/chromeos_switches.cc
+++ b/chromeos/chromeos_switches.cc
@@ -12,6 +12,11 @@
 
 namespace chromeos {
 namespace switches {
+// If this flag is passed, failed policy fetches will not cause profile
+// initialization to fail. This is useful for tests because it means that
+// tests don't have to mock out the policy infrastructure.
+const char kAllowFailedPolicyFetchForTest[] =
+    "allow-failed-policy-fetch-for-test";
 
 // Allows remote attestation (RA) in dev mode for testing purpose. Usually RA
 // is disabled in dev mode because it will always fail. However, there are cases
diff --git a/chromeos/chromeos_switches.h b/chromeos/chromeos_switches.h
index 4d7a5de1..ee53d4ef 100644
--- a/chromeos/chromeos_switches.h
+++ b/chromeos/chromeos_switches.h
@@ -21,6 +21,7 @@
 // see chromeos::LoginUtil::GetOffTheRecordCommandLine().)
 
 // Please keep alphabetized.
+CHROMEOS_EXPORT extern const char kAllowFailedPolicyFetchForTest[];
 CHROMEOS_EXPORT extern const char kAllowRAInDevMode[];
 CHROMEOS_EXPORT extern const char kAppOemManifestFile[];
 CHROMEOS_EXPORT extern const char kArtifactsDir[];
diff --git a/components/certificate_transparency/log_proof_fetcher.cc b/components/certificate_transparency/log_proof_fetcher.cc
index e32826e..5c7cbc7 100644
--- a/components/certificate_transparency/log_proof_fetcher.cc
+++ b/components/certificate_transparency/log_proof_fetcher.cc
@@ -336,6 +336,8 @@
       return base::Bind(base::ResetAndReturn(&failure_callback_), log_id_,
                         net::ERR_CT_STH_INCOMPLETE, net::HTTP_OK);
     }
+    // The log id is not a part of the response, fill in manually.
+    signed_tree_head.log_id = log_id_;
 
     return base::Bind(base::ResetAndReturn(&sth_fetched_), log_id_,
                       signed_tree_head);
diff --git a/components/certificate_transparency/log_proof_fetcher_unittest.cc b/components/certificate_transparency/log_proof_fetcher_unittest.cc
index 2555c141..39a5f3d 100644
--- a/components/certificate_transparency/log_proof_fetcher_unittest.cc
+++ b/components/certificate_transparency/log_proof_fetcher_unittest.cc
@@ -285,6 +285,7 @@
               sth.signature.signature_algorithm);
     EXPECT_EQ(expected_sth.signature.signature_data,
               sth.signature.signature_data);
+    EXPECT_EQ(kLogID, sth.log_id);
   }
 
   void VerifyConsistencyProof(
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
index 3124c6c..913b4f53 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
@@ -55,6 +55,32 @@
 // Retrieves the Data Reduction Proxy configuration from a remote service. This
 // object lives on the IO thread.
 // TODO(jeremyim): Rename the class to DataReductionProxyConfigGetter(?).
+//
+// The client config module is a state machine with 2 states:
+// 1) Chrome has a config. Requests will attempt to use DRP with that config.
+// 2) Chrome doesn’t have a config. Requests will go direct.
+//
+// When Chrome starts up, if there is a cached config on disk, it is loaded. Go
+// to state (1). Otherwise, go to state (2).
+//
+// When a config fetch finishes, move to state (1). If already in state (1),
+// replace the existing config.
+//
+// When in state (1), if a response comes back 407 whose request was made with
+// the existing config, invalidate the existing config and move to state (2).
+// Retry the request on the direct path.
+//
+// The following events will trigger a config fetch, without invalidating the
+// existing config. The existing config will be replaced when the async config
+// fetch returns.
+// * Starting Chrome.
+// * Using a config whose refresh_duration has expired (see
+//   components/data_reduction_proxy/proto/client_config.proto).
+// * Getting a IP address change event notification.
+//
+// Config fetches are async and subject to a backoff policy. On Android, the
+// fetch policy is different if Chrome is in the background. Every time a config
+// is fetched, it is written to the disk.
 class DataReductionProxyConfigServiceClient
     : public net::NetworkChangeNotifier::IPAddressObserver,
       public net::URLFetcherDelegate {
diff --git a/components/ntp_snippets.gypi b/components/ntp_snippets.gypi
index 551d3e6..d6a0d63 100644
--- a/components/ntp_snippets.gypi
+++ b/components/ntp_snippets.gypi
@@ -22,6 +22,7 @@
         'ntp_snippets/ntp_snippet.h',
         'ntp_snippets/ntp_snippets_fetcher.cc',
         'ntp_snippets/ntp_snippets_fetcher.h',
+        'ntp_snippets/ntp_snippets_scheduler.h',
         'ntp_snippets/ntp_snippets_service.cc',
         'ntp_snippets/ntp_snippets_service.h',
       ],
diff --git a/components/ntp_snippets/ntp_snippets_scheduler.h b/components/ntp_snippets/ntp_snippets_scheduler.h
new file mode 100644
index 0000000..afa60d91
--- /dev/null
+++ b/components/ntp_snippets/ntp_snippets_scheduler.h
@@ -0,0 +1,32 @@
+// 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_NTP_SNIPPETS_NTP_SNIPPETS_SCHEDULER_H_
+#define COMPONENTS_NTP_SNIPPETS_NTP_SNIPPETS_SCHEDULER_H_
+
+#include "base/macros.h"
+
+namespace ntp_snippets {
+
+// Interface to schedule the periodic fetching of snippets.
+class NTPSnippetsScheduler {
+ public:
+  // Schedule periodic fetching of snippets every |period_seconds|. The
+  // concrete implementation should call NTPSnippetsService::FetchSnippets once
+  // per period.
+  virtual bool Schedule(int period_seconds) = 0;
+
+  // Cancel the scheduled fetching task, if any.
+  virtual bool Unschedule() = 0;
+
+ protected:
+  NTPSnippetsScheduler() = default;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(NTPSnippetsScheduler);
+};
+
+}  // namespace ntp_snippets
+
+#endif  // COMPONENTS_NTP_SNIPPETS_NTP_SNIPPETS_SCHEDULER_H_
diff --git a/components/ntp_snippets/ntp_snippets_service.cc b/components/ntp_snippets/ntp_snippets_service.cc
index 149ab4a..c696405 100644
--- a/components/ntp_snippets/ntp_snippets_service.cc
+++ b/components/ntp_snippets/ntp_snippets_service.cc
@@ -12,7 +12,11 @@
 #include "base/task_runner_util.h"
 #include "base/values.h"
 
-namespace ntp_snippets {
+namespace {
+
+// TODO(crbug.com/587857): This is an extremely small value, for development.
+// Replace it by something sensible and add a command line param to control it.
+const int kDefaultFetchingIntervalSeconds = 60;
 
 bool ReadFileToString(const base::FilePath& path, std::string* data) {
   DCHECK(data);
@@ -21,13 +25,19 @@
   return success;
 }
 
+}  // namespace
+
+namespace ntp_snippets {
+
 NTPSnippetsService::NTPSnippetsService(
     scoped_refptr<base::SequencedTaskRunner> file_task_runner,
     const std::string& application_language_code,
+    NTPSnippetsScheduler* scheduler,
     scoped_ptr<NTPSnippetsFetcher> snippets_fetcher)
     : loaded_(false),
       file_task_runner_(file_task_runner),
       application_language_code_(application_language_code),
+      scheduler_(scheduler),
       snippets_fetcher_(std::move(snippets_fetcher)),
       weak_ptr_factory_(this) {
   snippets_fetcher_callback_ = snippets_fetcher_->AddCallback(
@@ -37,6 +47,22 @@
 
 NTPSnippetsService::~NTPSnippetsService() {}
 
+void NTPSnippetsService::Init(bool enabled) {
+  // If enabled, get snippets immediately. If we've downloaded them before,
+  // this will just read from disk.
+  if (enabled)
+    FetchSnippets(false);
+
+  // The scheduler only exists on Android so far, it's null on other platforms.
+  if (!scheduler_)
+    return;
+
+  if (enabled)
+    scheduler_->Schedule(kDefaultFetchingIntervalSeconds);
+  else
+    scheduler_->Unschedule();
+}
+
 void NTPSnippetsService::Shutdown() {
   FOR_EACH_OBSERVER(NTPSnippetsServiceObserver, observers_,
                     NTPSnippetsServiceShutdown(this));
@@ -66,6 +92,8 @@
 }
 
 bool NTPSnippetsService::LoadFromJSONString(const std::string& str) {
+  snippets_.clear();
+
   JSONStringValueDeserializer deserializer(str);
   int error_code;
   std::string error_message;
diff --git a/components/ntp_snippets/ntp_snippets_service.h b/components/ntp_snippets/ntp_snippets_service.h
index f9d2a40a..1b46bad 100644
--- a/components/ntp_snippets/ntp_snippets_service.h
+++ b/components/ntp_snippets/ntp_snippets_service.h
@@ -18,6 +18,7 @@
 #include "components/ntp_snippets/inner_iterator.h"
 #include "components/ntp_snippets/ntp_snippet.h"
 #include "components/ntp_snippets/ntp_snippets_fetcher.h"
+#include "components/ntp_snippets/ntp_snippets_scheduler.h"
 
 namespace ntp_snippets {
 
@@ -36,9 +37,12 @@
   // (British english person in the US) are not language code.
   NTPSnippetsService(scoped_refptr<base::SequencedTaskRunner> file_task_runner,
                      const std::string& application_language_code,
+                     NTPSnippetsScheduler* scheduler,
                      scoped_ptr<NTPSnippetsFetcher> snippets_fetcher);
   ~NTPSnippetsService() override;
 
+  void Init(bool enabled);
+
   // Fetches snippets from the server. |overwrite| is true if existing snippets
   // should be overwritten.
   void FetchSnippets(bool overwrite);
@@ -99,6 +103,9 @@
   // The observers.
   base::ObserverList<NTPSnippetsServiceObserver> observers_;
 
+  // Scheduler for fetching snippets. Not owned.
+  NTPSnippetsScheduler* scheduler_;
+
   // The snippets fetcher
   scoped_ptr<NTPSnippetsFetcher> snippets_fetcher_;
 
diff --git a/components/ntp_snippets/ntp_snippets_service_unittest.cc b/components/ntp_snippets/ntp_snippets_service_unittest.cc
index f801e94..c845b1b8 100644
--- a/components/ntp_snippets/ntp_snippets_service_unittest.cc
+++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc
@@ -61,7 +61,7 @@
         signin_client_.get(), account_tracker_.get());
 
     scoped_ptr<NTPSnippetsService> service(
-        new NTPSnippetsService(task_runner.get(), std::string("fr"),
+        new NTPSnippetsService(task_runner.get(), std::string("fr"), nullptr,
           make_scoped_ptr(new NTPSnippetsFetcher(task_runner.get(),
             signin_manager, token_service, request_context_getter,
             base::FilePath()))));
@@ -75,7 +75,6 @@
   DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest);
 };
 
-
 TEST_F(NTPSnippetsServiceTest, Create) {
   scoped_ptr<NTPSnippetsService> service(CreateSnippetService());
   EXPECT_FALSE(service->is_loaded());
diff --git a/components/page_load_metrics/OWNERS b/components/page_load_metrics/OWNERS
index 97ebd81f..558b9927 100644
--- a/components/page_load_metrics/OWNERS
+++ b/components/page_load_metrics/OWNERS
@@ -1,3 +1,4 @@
+csharrison@chromium.org
 kinuko@chromium.org
 rdsmith@chromium.org
 ttuttle@chromium.org
diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc
index f4908c03..a680fc5 100644
--- a/components/policy/core/browser/browser_policy_connector.cc
+++ b/components/policy/core/browser/browser_policy_connector.cc
@@ -42,9 +42,7 @@
 }
 
 // Regexes that match many of the larger public email providers as we know
-// these users are not from hosted enterprise domains. Keep this list in sync
-// with the EnterpriseDomainRegex enum in histograms.xml (i.e. only add things
-// at the end).
+// these users are not from hosted enterprise domains.
 const wchar_t* const kNonManagedDomainPatterns[] = {
   L"aol\\.com",
   L"googlemail\\.com",
@@ -56,6 +54,7 @@
   L"qq\\.com",
   L"yahoo(\\.co|\\.com|)\\.[^.]+",  // yahoo.com, yahoo.co.uk, yahoo.com.tw
   L"yandex\\.ru",
+  L"consumer\\.example\\.com",
 };
 
 // Returns true if |domain| matches the regex |pattern|.
diff --git a/components/test_runner/test_common.cc b/components/test_runner/test_common.cc
index 2c7c772..ab02077 100644
--- a/components/test_runner/test_common.cc
+++ b/components/test_runner/test_common.cc
@@ -33,6 +33,10 @@
   }
   ~MockBlinkPlatform() override {}
 
+  void registerMemoryDumpProvider(blink::WebMemoryDumpProvider*,
+                                  const char* name) override {}
+  void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider*) override {}
+
  private:
   DISALLOW_COPY_AND_ASSIGN(MockBlinkPlatform);
 };
diff --git a/components/test_runner/test_runner.cc b/components/test_runner/test_runner.cc
index 1c63ef63..b55b4982 100644
--- a/components/test_runner/test_runner.cc
+++ b/components/test_runner/test_runner.cc
@@ -26,7 +26,6 @@
 #include "gin/handle.h"
 #include "gin/object_template_builder.h"
 #include "gin/wrappable.h"
-#include "third_party/WebKit/public/platform/WebBatteryStatus.h"
 #include "third_party/WebKit/public/platform/WebCanvas.h"
 #include "third_party/WebKit/public/platform/WebData.h"
 #include "third_party/WebKit/public/platform/WebPasswordCredential.h"
@@ -221,11 +220,6 @@
   void SetMockDeviceMotion(gin::Arguments* args);
   void SetMockDeviceOrientation(gin::Arguments* args);
   void SetMockScreenOrientation(const std::string& orientation);
-  void DidChangeBatteryStatus(bool charging,
-                              double chargingTime,
-                              double dischargingTime,
-                              double level);
-  void ResetBatteryStatus();
   void DidAcquirePointerLock();
   void DidNotAcquirePointerLock();
   void DidLosePointerLock();
@@ -461,9 +455,6 @@
                  &TestRunnerBindings::SetMockDeviceOrientation)
       .SetMethod("setMockScreenOrientation",
                  &TestRunnerBindings::SetMockScreenOrientation)
-      .SetMethod("didChangeBatteryStatus",
-                 &TestRunnerBindings::DidChangeBatteryStatus)
-      .SetMethod("resetBatteryStatus", &TestRunnerBindings::ResetBatteryStatus)
       .SetMethod("didAcquirePointerLock",
                  &TestRunnerBindings::DidAcquirePointerLock)
       .SetMethod("didNotAcquirePointerLock",
@@ -1020,21 +1011,6 @@
   runner_->SetMockScreenOrientation(orientation);
 }
 
-void TestRunnerBindings::DidChangeBatteryStatus(bool charging,
-                                                double chargingTime,
-                                                double dischargingTime,
-                                                double level) {
-  if (runner_) {
-    runner_->DidChangeBatteryStatus(charging, chargingTime,
-                                    dischargingTime, level);
-  }
-}
-
-void TestRunnerBindings::ResetBatteryStatus() {
-  if (runner_)
-    runner_->ResetBatteryStatus();
-}
-
 void TestRunnerBindings::DidAcquirePointerLock() {
   if (runner_)
     runner_->DidAcquirePointerLock();
@@ -1740,7 +1716,6 @@
     delegate_->SetBluetoothMockDataSet("");
     delegate_->ClearGeofencingMockProvider();
     delegate_->ResetPermissions();
-    ResetBatteryStatus();
     ResetDeviceLight();
   }
 
@@ -2571,23 +2546,6 @@
   delegate_->SetScreenOrientation(orientation);
 }
 
-void TestRunner::DidChangeBatteryStatus(bool charging,
-                                        double chargingTime,
-                                        double dischargingTime,
-                                        double level) {
-  blink::WebBatteryStatus status;
-  status.charging = charging;
-  status.chargingTime = chargingTime;
-  status.dischargingTime = dischargingTime;
-  status.level = level;
-  delegate_->DidChangeBatteryStatus(status);
-}
-
-void TestRunner::ResetBatteryStatus() {
-  blink::WebBatteryStatus status;
-  delegate_->DidChangeBatteryStatus(status);
-}
-
 void TestRunner::DidAcquirePointerLock() {
   DidAcquirePointerLockInternal();
 }
diff --git a/components/test_runner/test_runner.h b/components/test_runner/test_runner.h
index c6975a4..cd9e9ae 100644
--- a/components/test_runner/test_runner.h
+++ b/components/test_runner/test_runner.h
@@ -312,12 +312,6 @@
 
   void SetMockScreenOrientation(const std::string& orientation);
 
-  void DidChangeBatteryStatus(bool charging,
-                              double chargingTime,
-                              double dischargingTime,
-                              double level);
-  void ResetBatteryStatus();
-
   void DidAcquirePointerLock();
   void DidNotAcquirePointerLock();
   void DidLosePointerLock();
diff --git a/components/test_runner/web_test_delegate.h b/components/test_runner/web_test_delegate.h
index 9aa5290..738fa88 100644
--- a/components/test_runner/web_test_delegate.h
+++ b/components/test_runner/web_test_delegate.h
@@ -18,7 +18,6 @@
 #define WEBTESTRUNNER_NEW_HISTORY_CAPTURE
 
 namespace blink {
-class WebBatteryStatus;
 class WebDeviceMotionData;
 class WebDeviceOrientationData;
 class WebFrame;
@@ -82,10 +81,6 @@
   // Reset the screen orientation data used for testing.
   virtual void ResetScreenOrientation() = 0;
 
-  // Notifies blink about a change in battery status.
-  virtual void DidChangeBatteryStatus(
-      const blink::WebBatteryStatus& status) = 0;
-
   // Add a message to the text dump for the layout test.
   virtual void PrintMessage(const std::string& message) = 0;
 
diff --git a/components/tracing/process_metrics_memory_dump_provider.cc b/components/tracing/process_metrics_memory_dump_provider.cc
index 141764b..e299a79 100644
--- a/components/tracing/process_metrics_memory_dump_provider.cc
+++ b/components/tracing/process_metrics_memory_dump_provider.cc
@@ -207,7 +207,8 @@
     base::ProcessId process) {
   scoped_ptr<ProcessMetricsMemoryDumpProvider> metrics_provider(
       new ProcessMetricsMemoryDumpProvider(process));
-  base::trace_event::MemoryDumpProvider::Options options(process);
+  base::trace_event::MemoryDumpProvider::Options options;
+  options.target_pid = process;
   base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
       metrics_provider.get(), "ProcessMemoryMetrics", nullptr, options);
   bool did_insert =
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 84415e1..947575e 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -1775,15 +1775,15 @@
       return nil;
 
     DCHECK(object);
-    if (object->IsTextOnlyObject() &&
+    if ((object->IsSimpleTextControl() || object->IsTextOnlyObject()) &&
         offset < static_cast<int>(object->GetText().length())) {
       ++offset;
     } else {
-      offset = 0;
-      while (object &&
-             !(object->IsTextOnlyObject() && object->GetText().length() == 0)) {
+      do {
         object = BrowserAccessibilityManager::NextTextOnlyObject(object);
-      }
+      } while (
+          object &&
+          !(object->IsTextOnlyObject() && object->GetText().length() == 0));
       if (!object)
         return nil;
 
@@ -1800,13 +1800,15 @@
       return nil;
 
     DCHECK(object);
-    if (object->IsTextOnlyObject() && offset > 0) {
+    if ((object->IsSimpleTextControl() || object->IsTextOnlyObject()) &&
+        offset > 0) {
       --offset;
     } else {
-      while (object &&
-             !(object->IsTextOnlyObject() && object->GetText().length() == 0)) {
+      do {
         object = BrowserAccessibilityManager::PreviousTextOnlyObject(object);
-      }
+      } while (
+          object &&
+          !(object->IsTextOnlyObject() && object->GetText().length() == 0));
       if (!object)
         return nil;
 
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index ef84aac..c6b65e6 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -474,7 +474,7 @@
   return gfx::Rect();
 }
 
-// Static
+// static
 BrowserAccessibility* BrowserAccessibilityManager::NextInTreeOrder(
     const BrowserAccessibility* object) {
   if (!object)
@@ -494,7 +494,7 @@
   return nullptr;
 }
 
-// Static
+// static
 BrowserAccessibility* BrowserAccessibilityManager::PreviousInTreeOrder(
     const BrowserAccessibility* object) {
   if (!object)
@@ -510,7 +510,7 @@
   return sibling;
 }
 
-// Static
+// static
 BrowserAccessibility* BrowserAccessibilityManager::PreviousTextOnlyObject(
     const BrowserAccessibility* object) {
   BrowserAccessibility* previous_object = PreviousInTreeOrder(object);
@@ -520,7 +520,7 @@
   return previous_object;
 }
 
-// Static
+// static
 BrowserAccessibility* BrowserAccessibilityManager::NextTextOnlyObject(
     const BrowserAccessibility* object) {
   BrowserAccessibility* next_object = NextInTreeOrder(object);
@@ -530,7 +530,7 @@
   return next_object;
 }
 
-// Static
+// static
 bool BrowserAccessibilityManager::FindIndicesInCommonParent(
     const BrowserAccessibility& object1,
     const BrowserAccessibility& object2,
@@ -564,7 +564,7 @@
   return true;
 }
 
-// Static
+// static
 base::string16 BrowserAccessibilityManager::GetTextForRange(
     const BrowserAccessibility& start_object,
     int start_offset,
@@ -573,6 +573,19 @@
   DCHECK_GE(start_offset, 0);
   DCHECK_GE(end_offset, 0);
 
+  if (&start_object == &end_object && start_object.IsSimpleTextControl()) {
+    if (start_offset > end_offset)
+      std::swap(start_offset, end_offset);
+
+    if (start_offset >= static_cast<int>(start_object.GetValue().length()) ||
+        end_offset > static_cast<int>(start_object.GetValue().length())) {
+      return base::string16();
+    }
+
+    return start_object.GetValue().substr(start_offset,
+                                          end_offset - start_offset);
+  }
+
   int child_index1 = -1;
   int child_index2 = -1;
   if (&start_object != &end_object) {
@@ -618,16 +631,14 @@
 
   // Be a little permissive with the start and end offsets.
   if (start_text_object == end_text_object) {
+    if (start_offset > end_offset)
+      std::swap(start_offset, end_offset);
+
     if (start_offset <
             static_cast<int>(start_text_object->GetText().length()) &&
         end_offset <= static_cast<int>(end_text_object->GetText().length())) {
-      if (start_offset <= end_offset) {
-        return start_text_object->GetText().substr(start_offset,
-                                                   end_offset - start_offset);
-      } else {
-        return start_text_object->GetText().substr(end_offset,
-                                                   start_offset - end_offset);
-      }
+      return start_text_object->GetText().substr(start_offset,
+                                                 end_offset - start_offset);
     }
     return start_text_object->GetText();
   }
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
index 3d6ff9af6..712de43 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -183,24 +183,27 @@
       break;
     case ui::AX_EVENT_DOCUMENT_SELECTION_CHANGED: {
       mac_notification = NSAccessibilitySelectedTextChangedNotification;
+      // WebKit fires a notification both on the focused object and the root.
+      BrowserAccessibility* focus = GetFocus();
+      if (!focus)
+        break;
+      NSAccessibilityPostNotification(focus->ToBrowserAccessibilityCocoa(),
+                                      mac_notification);
+
       if (base::mac::IsOSElCapitanOrLater()) {
         // |NSAccessibilityPostNotificationWithUserInfo| should be used on OS X
         // 10.11 or later to notify Voiceover about text selection changes. This
         // API has been present on versions of OS X since 10.7 but doesn't
         // appear to be needed by Voiceover before version 10.11.
-        // WebKit fires a notification both on the focused object and the root.
         NSDictionary* user_info =
             GetUserInfoForSelectedTextChangedNotification();
 
-        BrowserAccessibility* focus = GetFocus();
-        if (!focus)
-          return;
-        NSAccessibilityPostNotificationWithUserInfo(
-            focus->ToBrowserAccessibilityCocoa(), mac_notification, user_info);
-
         BrowserAccessibility* root = GetRoot();
         if (!root)
           return;
+
+        NSAccessibilityPostNotificationWithUserInfo(
+            focus->ToBrowserAccessibilityCocoa(), mac_notification, user_info);
         NSAccessibilityPostNotificationWithUserInfo(
             root->ToBrowserAccessibilityCocoa(), mac_notification, user_info);
         return;
diff --git a/content/browser/android/synchronous_compositor_base.cc b/content/browser/android/synchronous_compositor_base.cc
index 415e228b..e218d402 100644
--- a/content/browser/android/synchronous_compositor_base.cc
+++ b/content/browser/android/synchronous_compositor_base.cc
@@ -37,8 +37,6 @@
   g_sync_point_manager = service->sync_point_manager();
   GpuProcessHost::RegisterGpuMainThreadFactory(
       CreateInProcessGpuThreadForSynchronousCompositor);
-  SynchronousCompositorStreamTextureFactoryImpl::GetInstance()
-      ->SetDeferredGpuService(service);
 }
 
 // static
diff --git a/content/browser/loader/async_revalidation_manager_browsertest.cc b/content/browser/loader/async_revalidation_manager_browsertest.cc
index f799943..33826ca5 100644
--- a/content/browser/loader/async_revalidation_manager_browsertest.cc
+++ b/content/browser/loader/async_revalidation_manager_browsertest.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/public/common/browser_side_navigation_policy.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/content_browser_test.h"
 #include "content/public/test/content_browser_test_utils.h"
@@ -150,6 +151,10 @@
 // triggers an async revalidation.
 IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest,
                        StaleWhileRevalidateIsApplied) {
+  // PlzNavigate: Stale while revalidate is disabled.
+  // TODO(clamy): Re-enable the test when there is support.
+  if (IsBrowserSideNavigationEnabled())
+    return;
   RegisterCountingRequestHandler();
   GURL url(embedded_test_server()->GetURL(kCountedHtmlPath));
 
@@ -173,6 +178,10 @@
 // The fresh cache entry must become visible once the async revalidation request
 // has been sent.
 IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest, CacheIsUpdated) {
+  // PlzNavigate: Stale while revalidate is disabled.
+  // TODO(clamy): Re-enable the test when there is support.
+  if (IsBrowserSideNavigationEnabled())
+    return;
   using base::ASCIIToUTF16;
   RegisterCountingRequestHandler();
   GURL url(embedded_test_server()->GetURL(kCountedHtmlPath));
@@ -201,6 +210,10 @@
 // applied immediately.
 IN_PROC_BROWSER_TEST_F(AsyncRevalidationManagerBrowserTest,
                        CookieSetAsynchronously) {
+  // PlzNavigate: Stale while revalidate is disabled.
+  // TODO(clamy): Re-enable the test when there is support.
+  if (IsBrowserSideNavigationEnabled())
+    return;
   RegisterCookieRequestHandler();
   GURL url(embedded_test_server()->GetURL(kCookieHtmlPath));
 
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index af820fe..de84892 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -1344,7 +1344,11 @@
     }
   }
 
-  request->CreateUIRequest("", video_device_id);
+  const std::string audio_device_id =
+      request->audio_type() == MEDIA_DESKTOP_AUDIO_CAPTURE ? video_device_id
+                                                           : "";
+
+  request->CreateUIRequest(audio_device_id, video_device_id);
   return true;
 }
 
@@ -1855,27 +1859,27 @@
     if (device_info.device.type == content::MEDIA_TAB_VIDEO_CAPTURE ||
         device_info.device.type == content::MEDIA_TAB_AUDIO_CAPTURE) {
       device_info.device.id = request->tab_capture_device_id;
-
-      // Initialize the sample_rate and channel_layout here since for audio
-      // mirroring, we don't go through EnumerateDevices where these are usually
-      // initialized.
-      if (device_info.device.type == content::MEDIA_TAB_AUDIO_CAPTURE) {
-        int sample_rate = output_parameters.sample_rate();
-        // If we weren't able to get the native sampling rate or the sample_rate
-        // is outside the valid range for input devices set reasonable defaults.
-        if (sample_rate <= 0 || sample_rate > 96000)
-          sample_rate = 44100;
-
-        device_info.device.input.sample_rate = sample_rate;
-        device_info.device.input.channel_layout = media::CHANNEL_LAYOUT_STEREO;
-      }
     }
 
-    if (device_info.device.type == request->audio_type()) {
+    // Initialize the sample_rate and channel_layout here since for audio
+    // mirroring, we don't go through EnumerateDevices where these are usually
+    // initialized.
+    if (device_info.device.type == content::MEDIA_TAB_AUDIO_CAPTURE ||
+        device_info.device.type == content::MEDIA_DESKTOP_AUDIO_CAPTURE) {
+      int sample_rate = output_parameters.sample_rate();
+      // If we weren't able to get the native sampling rate or the sample_rate
+      // is outside the valid range for input devices set reasonable defaults.
+      if (sample_rate <= 0 || sample_rate > 96000)
+        sample_rate = 44100;
+
+      device_info.device.input.sample_rate = sample_rate;
+      device_info.device.input.channel_layout = media::CHANNEL_LAYOUT_STEREO;
+    }
+
+    if (device_info.device.type == request->audio_type())
       found_audio = true;
-    } else if (device_info.device.type == request->video_type()) {
+    else if (device_info.device.type == request->video_type())
       found_video = true;
-    }
 
     // If this is request for a new MediaStream, a device is only opened once
     // per render frame. This is so that the permission to use a device can be
@@ -2045,14 +2049,17 @@
   if (!window_id)
     return;
 
-  // Pass along for desktop capturing. Ignored for other stream types.
-  if (video_type == MEDIA_DESKTOP_VIDEO_CAPTURE) {
-    for (const StreamDeviceInfo& device_info : devices ) {
-      if (device_info.device.type == MEDIA_DESKTOP_VIDEO_CAPTURE) {
-        video_capture_manager_->SetDesktopCaptureWindowId(
-            device_info.session_id, window_id);
-        break;
-      }
+  if (video_type != MEDIA_DESKTOP_VIDEO_CAPTURE)
+    return;
+
+  // Pass along for desktop screen and window capturing.
+  for (const StreamDeviceInfo& device_info : devices) {
+    if (device_info.device.type == MEDIA_DESKTOP_VIDEO_CAPTURE &&
+        !WebContentsMediaCaptureId::IsWebContentsDeviceId(
+            device_info.device.id)) {
+      video_capture_manager_->SetDesktopCaptureWindowId(device_info.session_id,
+                                                        window_id);
+      break;
     }
   }
 }
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index 04eebe46..20c224c 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -517,7 +517,14 @@
   scoped_ptr<media::VideoCaptureDevice> video_capture_device;
 #if defined(ENABLE_SCREEN_CAPTURE)
   DesktopMediaID desktop_id = DesktopMediaID::Parse(id);
-  if (!desktop_id.is_null()) {
+  if (desktop_id.is_null()) {
+    device_client->OnError(FROM_HERE, "Desktop media ID is null");
+    return nullptr;
+  }
+
+  if (desktop_id.type == DesktopMediaID::TYPE_WEB_CONTENTS) {
+    video_capture_device.reset(WebContentsVideoCaptureDevice::Create(id));
+  } else {
 #if defined(USE_AURA)
     video_capture_device = DesktopCaptureDeviceAura::Create(desktop_id);
 #endif
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 3ba47ed..40f8714b 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
@@ -37,7 +37,6 @@
 #include "content/browser/renderer_host/render_widget_host_impl.h"
 #include "content/browser/web_contents/web_contents_view_aura.h"
 #include "content/common/gpu/client/gl_helper.h"
-#include "content/common/gpu/gpu_messages.h"
 #include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/input/input_event_utils.h"
 #include "content/common/input/synthetic_web_input_event_builders.h"
@@ -52,6 +51,7 @@
 #include "content/test/test_render_view_host.h"
 #include "content/test/test_web_contents.h"
 #include "ipc/ipc_test_sink.h"
+#include "media/base/video_frame.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/aura/client/aura_constants.h"
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index d748d53..3103e95e 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3153,6 +3153,11 @@
   if (!details.is_in_page)
     CancelActiveAndPendingDialogs();
 
+  // If this is a user-initiated navigation, start allowing JavaScript dialogs
+  // again.
+  if (params.gesture == NavigationGestureUser && dialog_manager_)
+    dialog_manager_->ResetDialogState(this);
+
   // Notify observers about navigation.
   FOR_EACH_OBSERVER(WebContentsObserver, observers_,
                     DidNavigateAnyFrame(render_frame_host, details, params));
@@ -4793,4 +4798,9 @@
   FOR_EACH_OBSERVER(WebContentsObserver, observers_, MediaStoppedPlaying(id));
 }
 
+void WebContentsImpl::SetJavaScriptDialogManagerForTesting(
+    JavaScriptDialogManager* dialog_manager) {
+  dialog_manager_ = dialog_manager;
+}
+
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 753c690..79c0c86e 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -744,6 +744,8 @@
                            LoadResourceFromMemoryCacheWithBadSecurityInfo);
   FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest,
                            LoadResourceFromMemoryCacheWithEmptySecurityInfo);
+  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest,
+                           ResetJavaScriptDialogOnUserNavigate);
   FRIEND_TEST_ALL_PREFIXES(FormStructureBrowserTest, HTMLFiles);
   FRIEND_TEST_ALL_PREFIXES(NavigationControllerTest, HistoryNavigate);
   FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest, PageDoesBackAndReload);
@@ -1028,6 +1030,9 @@
   // the main frame if empty).
   WebUI* CreateWebUI(const GURL& url, const std::string& frame_name);
 
+  void SetJavaScriptDialogManagerForTesting(
+      JavaScriptDialogManager* dialog_manager);
+
   // Data for core operation ---------------------------------------------------
 
   // Delegate for notifying our owner about stuff. Not owned by us.
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 965da64..45d920b 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -28,6 +28,7 @@
 #include "content/common/view_messages.h"
 #include "content/public/browser/global_request_id.h"
 #include "content/public/browser/interstitial_page_delegate.h"
+#include "content/public/browser/javascript_dialog_manager.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
@@ -3384,4 +3385,69 @@
   EXPECT_TRUE(backend->HasAllowException(test_url.host()));
 }
 
+class TestJavaScriptDialogManager : public JavaScriptDialogManager {
+ public:
+  TestJavaScriptDialogManager() {}
+  ~TestJavaScriptDialogManager() override {}
+
+  size_t reset_count() { return reset_count_; }
+
+  // JavaScriptDialogManager
+
+  void RunJavaScriptDialog(WebContents* web_contents,
+                           const GURL& origin_url,
+                           const std::string& accept_lang,
+                           JavaScriptMessageType javascript_message_type,
+                           const base::string16& message_text,
+                           const base::string16& default_prompt_text,
+                           const DialogClosedCallback& callback,
+                           bool* did_suppress_message) override {
+    *did_suppress_message = true;
+  };
+
+  void RunBeforeUnloadDialog(WebContents* web_contents,
+                             const base::string16& message_text,
+                             bool is_reload,
+                             const DialogClosedCallback& callback) override {}
+
+  bool HandleJavaScriptDialog(WebContents* web_contents,
+                              bool accept,
+                              const base::string16* prompt_override) override {
+    return true;
+  }
+
+  void CancelActiveAndPendingDialogs(WebContents* web_contents) override {}
+
+  void ResetDialogState(WebContents* web_contents) override { ++reset_count_; }
+
+ private:
+  size_t reset_count_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(TestJavaScriptDialogManager);
+};
+
+TEST_F(WebContentsImplTest, ResetJavaScriptDialogOnUserNavigate) {
+  scoped_ptr<TestJavaScriptDialogManager> delegate(
+      new TestJavaScriptDialogManager());
+  contents()->SetJavaScriptDialogManagerForTesting(delegate.get());
+
+  // A user-initiated navigation.
+
+  contents()->GetMainFrame()->PrepareForCommit();
+  contents()->TestDidNavigate(contents()->GetMainFrame(), 1, 0, true,
+                              GURL("about:whatever"),
+                              ui::PAGE_TRANSITION_TYPED);
+  EXPECT_EQ(1u, delegate->reset_count());
+
+  // An automatic navigation.
+
+  contents()->GetMainFrame()->PrepareForCommit();
+  contents()->GetMainFrame()->SendNavigateWithModificationCallback(
+      2, 0, true, GURL(url::kAboutBlankURL), base::Bind(SetAsNonUserGesture));
+
+  EXPECT_EQ(1u, delegate->reset_count());
+
+  contents()->SetJavaScriptDialogManagerForTesting(nullptr);
+}
+
 }  // namespace content
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index 8f9c7b16..6474a7f8 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
+#include "base/metrics/user_metrics_action.h"
 #include "base/rand_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
@@ -50,8 +51,6 @@
 #include "content/child/push_messaging/push_provider.h"
 #include "content/child/thread_safe_sender.h"
 #include "content/child/web_discardable_memory_impl.h"
-#include "content/child/web_memory_dump_provider_adapter.h"
-#include "content/child/web_process_memory_dump_impl.h"
 #include "content/child/web_url_loader_impl.h"
 #include "content/child/web_url_request_util.h"
 #include "content/child/websocket_bridge.h"
@@ -487,32 +486,9 @@
   return static_cast<blink::WebThread*>(current_thread_slot_.Get());
 }
 
-void BlinkPlatformImpl::registerMemoryDumpProvider(
-    blink::WebMemoryDumpProvider* wmdp, const char* name) {
-  WebMemoryDumpProviderAdapter* wmdp_adapter =
-      new WebMemoryDumpProviderAdapter(wmdp);
-  bool did_insert =
-      memory_dump_providers_.add(wmdp, make_scoped_ptr(wmdp_adapter)).second;
-  if (!did_insert)
-    return;
-  wmdp_adapter->set_is_registered(true);
-  base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
-      wmdp_adapter, name, base::ThreadTaskRunnerHandle::Get());
-}
-
-void BlinkPlatformImpl::unregisterMemoryDumpProvider(
-    blink::WebMemoryDumpProvider* wmdp) {
-  scoped_ptr<WebMemoryDumpProviderAdapter> wmdp_adapter =
-      memory_dump_providers_.take_and_erase(wmdp);
-  if (!wmdp_adapter)
-    return;
-  base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
-      wmdp_adapter.get());
-  wmdp_adapter->set_is_registered(false);
-}
-
-blink::WebProcessMemoryDump* BlinkPlatformImpl::createProcessMemoryDump() {
-  return new WebProcessMemoryDumpImpl();
+void BlinkPlatformImpl::recordAction(const blink::UserMetricsAction& name) {
+    if (ChildThread* child_thread = ChildThread::Get())
+        child_thread->RecordComputedAction(name.action());
 }
 
 blink::Platform::WebMemoryAllocatorDumpGuid
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h
index 59fa1f0..bdf839e 100644
--- a/content/child/blink_platform_impl.h
+++ b/content/child/blink_platform_impl.h
@@ -51,7 +51,6 @@
 class TraceLogObserverAdapter;
 class WebCryptoImpl;
 class WebGeofencingProviderImpl;
-class WebMemoryDumpProviderAdapter;
 
 class CONTENT_EXPORT BlinkPlatformImpl
     : NON_EXPORTED_BASE(public blink::Platform) {
@@ -99,11 +98,7 @@
   bool portAllowed(const blink::WebURL& url) const override;
   blink::WebThread* createThread(const char* name) override;
   blink::WebThread* currentThread() override;
-  void registerMemoryDumpProvider(blink::WebMemoryDumpProvider* wmdp,
-                                  const char* name) override;
-  void unregisterMemoryDumpProvider(
-      blink::WebMemoryDumpProvider* wmdp) override;
-  blink::WebProcessMemoryDump* createProcessMemoryDump() override;
+  void recordAction(const blink::UserMetricsAction&) override;
   blink::Platform::WebMemoryAllocatorDumpGuid createWebMemoryAllocatorDumpGuid(
       const blink::WebString& guidStr) override;
   void addTraceLogEnabledStateObserver(
@@ -163,9 +158,6 @@
   base::ThreadLocalStorage::Slot current_thread_slot_;
   webcrypto::WebCryptoImpl web_crypto_;
   scoped_ptr<WebGeofencingProviderImpl> geofencing_provider_;
-  base::ScopedPtrHashMap<blink::WebMemoryDumpProvider*,
-                         scoped_ptr<WebMemoryDumpProviderAdapter>>
-      memory_dump_providers_;
   base::ScopedPtrHashMap<blink::Platform::TraceLogEnabledStateObserver*,
                          scoped_ptr<TraceLogObserverAdapter>>
       trace_log_observers_;
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc
index 442d7b67..c5cf734 100644
--- a/content/child/child_thread_impl.cc
+++ b/content/child/child_thread_impl.cc
@@ -553,6 +553,14 @@
 }
 #endif
 
+void ChildThreadImpl::RecordAction(const base::UserMetricsAction& action) {
+    NOTREACHED();
+}
+
+void ChildThreadImpl::RecordComputedAction(const std::string& action) {
+    NOTREACHED();
+}
+
 IPC::MessageRouter* ChildThreadImpl::GetRouter() {
   DCHECK(base::MessageLoop::current() == message_loop());
   return &router_;
diff --git a/content/child/child_thread_impl.h b/content/child/child_thread_impl.h
index d7b340b8..134eb7a7 100644
--- a/content/child/child_thread_impl.h
+++ b/content/child/child_thread_impl.h
@@ -89,6 +89,8 @@
   void PreCacheFont(const LOGFONT& log_font) override;
   void ReleaseCachedFonts() override;
 #endif
+  void RecordAction(const base::UserMetricsAction& action) override;
+  void RecordComputedAction(const std::string& action) override;
 
   IPC::SyncChannel* channel() { return channel_.get(); }
 
diff --git a/content/child/web_discardable_memory_impl.cc b/content/child/web_discardable_memory_impl.cc
index a92083c..b2cdd20 100644
--- a/content/child/web_discardable_memory_impl.cc
+++ b/content/child/web_discardable_memory_impl.cc
@@ -8,7 +8,7 @@
 
 #include "base/memory/discardable_memory.h"
 #include "base/memory/discardable_memory_allocator.h"
-#include "content/child/web_process_memory_dump_impl.h"
+#include "third_party/WebKit/public/platform/WebProcessMemoryDump.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 
 namespace content {
@@ -39,8 +39,8 @@
 WebDiscardableMemoryImpl::createMemoryAllocatorDump(
     const blink::WebString& name,
     blink::WebProcessMemoryDump* wpmd) const {
-  return static_cast<content::WebProcessMemoryDumpImpl*>(wpmd)
-      ->CreateDiscardableMemoryAllocatorDump(name.utf8(), discardable_.get());
+  return wpmd->createDiscardableMemoryAllocatorDump(
+      name.utf8(), discardable_.get());
 }
 
 WebDiscardableMemoryImpl::WebDiscardableMemoryImpl(
diff --git a/content/common/DEPS b/content/common/DEPS
index 3ba16c40..89bdfb6 100644
--- a/content/common/DEPS
+++ b/content/common/DEPS
@@ -6,7 +6,6 @@
   # No inclusion of WebKit from the browser, other than strictly enum/POD,
   # header-only types, and some selected common code.
   "-third_party/WebKit",
-  "+third_party/WebKit/public/platform/WebBatteryStatus.h",
   "+third_party/WebKit/public/platform/WebCircularGeofencingRegion.h",
   "+third_party/WebKit/public/platform/WebCString.h",
   "+third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionData.h",
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h
index 312e56f..672b4cf 100644
--- a/content/common/content_message_generator.h
+++ b/content/common/content_message_generator.h
@@ -30,6 +30,7 @@
 #include "content/common/geofencing_messages.h"
 #include "content/common/gpu/gpu_host_messages.h"
 #include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/media_messages.h"
 #include "content/common/indexed_db/indexed_db_messages.h"
 #include "content/common/input_messages.h"
 #include "content/common/manifest_manager_messages.h"
diff --git a/content/common/gpu/client/gpu_jpeg_decode_accelerator_host.cc b/content/common/gpu/client/gpu_jpeg_decode_accelerator_host.cc
index 5af70eb..846bd53 100644
--- a/content/common/gpu/client/gpu_jpeg_decode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_jpeg_decode_accelerator_host.cc
@@ -15,6 +15,7 @@
 #include "build/build_config.h"
 #include "content/common/gpu/client/gpu_channel_host.h"
 #include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/media_messages.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_message_utils.h"
diff --git a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
index 19a336b..02d61f8 100644
--- a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
@@ -9,7 +9,7 @@
 #include "base/message_loop/message_loop.h"
 #include "build/build_config.h"
 #include "content/common/gpu/client/gpu_channel_host.h"
-#include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/media_messages.h"
 #include "content/common/view_messages.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_message_utils.h"
diff --git a/content/common/gpu/client/gpu_video_encode_accelerator_host.cc b/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
index 9002490e..d240a89 100644
--- a/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
@@ -6,9 +6,10 @@
 
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/thread_task_runner_handle.h"
 #include "content/common/gpu/client/gpu_channel_host.h"
-#include "content/common/gpu/gpu_messages.h"
 #include "content/common/gpu/media/gpu_video_accelerator_util.h"
+#include "content/common/gpu/media_messages.h"
 #include "media/base/video_frame.h"
 #include "media/video/video_encode_accelerator.h"
 #include "ui/gfx/gpu_memory_buffer.h"
diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc
index eae3cd4..f065df9 100644
--- a/content/common/gpu/gpu_command_buffer_stub.cc
+++ b/content/common/gpu/gpu_command_buffer_stub.cc
@@ -26,6 +26,7 @@
 #include "content/common/gpu/image_transport_surface.h"
 #include "content/common/gpu/media/gpu_video_decode_accelerator.h"
 #include "content/common/gpu/media/gpu_video_encode_accelerator.h"
+#include "content/common/gpu/media_messages.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
 #include "gpu/command_buffer/common/constants.h"
diff --git a/content/common/gpu/gpu_messages.h b/content/common/gpu/gpu_messages.h
index 8ad2fce9..4a7da50 100644
--- a/content/common/gpu/gpu_messages.h
+++ b/content/common/gpu/gpu_messages.h
@@ -30,11 +30,6 @@
 #include "gpu/ipc/gpu_command_buffer_traits.h"
 #include "ipc/ipc_channel_handle.h"
 #include "ipc/ipc_message_macros.h"
-#include "media/base/decrypt_config.h"
-#include "media/base/video_types.h"
-#include "media/video/jpeg_decode_accelerator.h"
-#include "media/video/video_decode_accelerator.h"
-#include "media/video/video_encode_accelerator.h"
 #include "ui/events/latency_info.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/gpu_memory_buffer.h"
@@ -66,13 +61,6 @@
                           gpu::MemoryAllocation::CUTOFF_LAST)
 IPC_ENUM_TRAITS_MAX_VALUE(gpu::error::ContextLostReason,
                           gpu::error::kContextLostReasonLast)
-IPC_ENUM_TRAITS_MAX_VALUE(media::JpegDecodeAccelerator::Error,
-                          media::JpegDecodeAccelerator::LARGEST_ERROR_ENUM)
-IPC_ENUM_TRAITS_MAX_VALUE(media::VideoEncodeAccelerator::Error,
-                          media::VideoEncodeAccelerator::kErrorMax)
-IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodecProfile,
-                              media::VIDEO_CODEC_PROFILE_MIN,
-                              media::VIDEO_CODEC_PROFILE_MAX)
 IPC_ENUM_TRAITS_MIN_MAX_VALUE(gpu::CollectInfoResult,
                               gpu::kCollectInfoNone,
                               gpu::kCollectInfoFatalFailure)
@@ -89,43 +77,6 @@
   IPC_STRUCT_MEMBER(gfx::GpuPreference, gpu_preference)
 IPC_STRUCT_END()
 
-IPC_STRUCT_BEGIN(AcceleratedJpegDecoderMsg_Decode_Params)
-  IPC_STRUCT_MEMBER(int32_t, input_buffer_id)
-  IPC_STRUCT_MEMBER(gfx::Size, coded_size)
-  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, input_buffer_handle)
-  IPC_STRUCT_MEMBER(uint32_t, input_buffer_size)
-  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, output_video_frame_handle)
-  IPC_STRUCT_MEMBER(uint32_t, output_buffer_size)
-IPC_STRUCT_END()
-
-IPC_STRUCT_BEGIN(AcceleratedVideoDecoderMsg_Decode_Params)
-  IPC_STRUCT_MEMBER(int32_t, bitstream_buffer_id)
-  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, buffer_handle)
-  IPC_STRUCT_MEMBER(uint32_t, size)
-  IPC_STRUCT_MEMBER(base::TimeDelta, presentation_timestamp)
-  IPC_STRUCT_MEMBER(std::string, key_id)
-  IPC_STRUCT_MEMBER(std::string, iv)
-  IPC_STRUCT_MEMBER(std::vector<media::SubsampleEntry>, subsamples)
-IPC_STRUCT_END()
-
-IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params)
-  IPC_STRUCT_MEMBER(int32_t, frame_id)
-  IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
-  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, buffer_handle)
-  IPC_STRUCT_MEMBER(uint32_t, buffer_offset)
-  IPC_STRUCT_MEMBER(uint32_t, buffer_size)
-  IPC_STRUCT_MEMBER(bool, force_keyframe)
-IPC_STRUCT_END()
-
-IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params2)
-  IPC_STRUCT_MEMBER(int32_t, frame_id)
-  IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
-  IPC_STRUCT_MEMBER(std::vector<gfx::GpuMemoryBufferHandle>,
-                    gpu_memory_buffer_handles)
-  IPC_STRUCT_MEMBER(gfx::Size, size)
-  IPC_STRUCT_MEMBER(bool, force_keyframe)
-IPC_STRUCT_END()
-
 IPC_STRUCT_BEGIN(GPUCommandBufferConsoleMessage)
   IPC_STRUCT_MEMBER(int32_t, id)
   IPC_STRUCT_MEMBER(std::string, message)
@@ -174,30 +125,6 @@
   IPC_STRUCT_TRAITS_MEMBER(device_string)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(media::VideoDecodeAccelerator::Config)
-  IPC_STRUCT_TRAITS_MEMBER(profile)
-  IPC_STRUCT_TRAITS_MEMBER(is_encrypted)
-  IPC_STRUCT_TRAITS_MEMBER(surface_id)
-IPC_STRUCT_TRAITS_END()
-
-IPC_STRUCT_TRAITS_BEGIN(gpu::VideoDecodeAcceleratorSupportedProfile)
-  IPC_STRUCT_TRAITS_MEMBER(profile)
-  IPC_STRUCT_TRAITS_MEMBER(max_resolution)
-  IPC_STRUCT_TRAITS_MEMBER(min_resolution)
-IPC_STRUCT_TRAITS_END()
-
-IPC_STRUCT_TRAITS_BEGIN(gpu::VideoDecodeAcceleratorCapabilities)
-  IPC_STRUCT_TRAITS_MEMBER(supported_profiles)
-  IPC_STRUCT_TRAITS_MEMBER(flags)
-IPC_STRUCT_TRAITS_END()
-
-IPC_STRUCT_TRAITS_BEGIN(gpu::VideoEncodeAcceleratorSupportedProfile)
-  IPC_STRUCT_TRAITS_MEMBER(profile)
-  IPC_STRUCT_TRAITS_MEMBER(max_resolution)
-  IPC_STRUCT_TRAITS_MEMBER(max_framerate_numerator)
-  IPC_STRUCT_TRAITS_MEMBER(max_framerate_denominator)
-IPC_STRUCT_TRAITS_END()
-
 IPC_STRUCT_TRAITS_BEGIN(gpu::GPUInfo)
   IPC_STRUCT_TRAITS_MEMBER(initialization_time)
   IPC_STRUCT_TRAITS_MEMBER(optimus)
@@ -249,11 +176,6 @@
   IPC_STRUCT_TRAITS_MEMBER(transport_type)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(media::SubsampleEntry)
-  IPC_STRUCT_TRAITS_MEMBER(clear_bytes)
-  IPC_STRUCT_TRAITS_MEMBER(cypher_bytes)
-IPC_STRUCT_TRAITS_END()
-
 //------------------------------------------------------------------------------
 // GPU Channel Messages
 // These are messages from a renderer process to the GPU process.
@@ -373,25 +295,6 @@
 // Destroy a previously created transfer buffer.
 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_DestroyTransferBuffer, int32_t /* id */)
 
-// Create and initialize a hardware video decoder using the specified route_id.
-// Created decoders should be freed with AcceleratedVideoDecoderMsg_Destroy when
-// no longer needed.
-IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_CreateVideoDecoder,
-                           media::VideoDecodeAccelerator::Config, /* config */
-                           int32_t,                               /* route_id */
-                           bool /* succeeded */)
-
-// Create and initialize a hardware video encoder using the specified route_id.
-// Created encoders should be freed with AcceleratedVideoEncoderMsg_Destroy when
-// no longer needed.
-IPC_SYNC_MESSAGE_ROUTED5_1(GpuCommandBufferMsg_CreateVideoEncoder,
-                           media::VideoPixelFormat /* input_format */,
-                           gfx::Size /* input_visible_size */,
-                           media::VideoCodecProfile /* output_profile */,
-                           uint32_t /* initial_bitrate */,
-                           int32_t, /* route_id */
-                           bool /* succeeded */)
-
 // Tells the proxy that there was an error and the command buffer had to be
 // destroyed for some reason.
 IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_Destroyed,
@@ -436,156 +339,3 @@
                            int32_t,  /* stream_id */
                            bool /* succeeded */)
 
-//------------------------------------------------------------------------------
-// Accelerated Video Decoder Messages
-// These messages are sent from Renderer process to GPU process.
-
-// Set a CDM on the decoder to handle encrypted buffers.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_SetCdm,
-                    int32_t) /* CDM ID */
-
-// Send input buffer for decoding.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_Decode,
-                    AcceleratedVideoDecoderMsg_Decode_Params)
-
-// Give the texture IDs for the textures the decoder will use for output.
-IPC_MESSAGE_ROUTED2(AcceleratedVideoDecoderMsg_AssignPictureBuffers,
-                    std::vector<int32_t>,  /* Picture buffer ID */
-                    std::vector<uint32_t>) /* Texture ID */
-
-// Send from Renderer process to the GPU process to recycle the given picture
-// buffer for further decoding.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_ReusePictureBuffer,
-                    int32_t) /* Picture buffer ID */
-
-// Send flush request to the decoder.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Flush)
-
-// Send reset request to the decoder.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Reset)
-
-// Send destroy request to the decoder.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Destroy)
-
-//------------------------------------------------------------------------------
-// Accelerated Video Decoder Host Messages
-// These messages are sent from GPU process to Renderer process.
-// Inform AcceleratedVideoDecoderHost that AcceleratedVideoDecoder has been
-// created.
-
-// Notify the CDM setting result.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_CdmAttached,
-                    bool) /* success */
-
-// Accelerated video decoder has consumed input buffer from transfer buffer.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
-                    int32_t) /* Processed buffer ID */
-
-// Allocate video frames for output of the hardware video decoder.
-IPC_MESSAGE_ROUTED3(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
-                    int32_t,   /* Number of video frames to generate */
-                    gfx::Size, /* Requested size of buffer */
-                    uint32_t)  /* Texture target */
-
-// Decoder reports that a picture is ready and buffer does not need to be passed
-// back to the decoder.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer,
-                    int32_t) /* Picture buffer ID */
-
-// Decoder reports that a picture is ready.
-IPC_MESSAGE_ROUTED4(AcceleratedVideoDecoderHostMsg_PictureReady,
-                    int32_t,   /* Picture buffer ID */
-                    int32_t,   /* Bitstream buffer ID */
-                    gfx::Rect, /* Visible rectangle */
-                    bool)      /* Buffer is HW overlay capable */
-
-// Confirm decoder has been flushed.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_FlushDone)
-
-// Confirm decoder has been reset.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_ResetDone)
-
-// Video decoder has encountered an error.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_ErrorNotification,
-                    uint32_t) /* Error ID */
-
-//------------------------------------------------------------------------------
-// Accelerated Video Encoder Messages
-// These messages are sent from the Renderer process to GPU process.
-
-// Queue a video frame to the encoder to encode. |frame_id| will be returned
-// by AcceleratedVideoEncoderHostMsg_NotifyInputDone.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode,
-                    AcceleratedVideoEncoderMsg_Encode_Params)
-
-// Queue a GpuMemoryBuffer backed video frame to the encoder to encode.
-// |frame_id| will be returned by
-// AcceleratedVideoEncoderHostMsg_NotifyInputDone.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode2,
-                    AcceleratedVideoEncoderMsg_Encode_Params2)
-
-// Queue a buffer to the encoder for use in returning output.  |buffer_id| will
-// be returned by AcceleratedVideoEncoderHostMsg_BitstreamBufferReady.
-IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
-                    int32_t /* buffer_id */,
-                    base::SharedMemoryHandle /* buffer_handle */,
-                    uint32_t /* buffer_size */)
-
-// Request a runtime encoding parameter change.
-IPC_MESSAGE_ROUTED2(AcceleratedVideoEncoderMsg_RequestEncodingParametersChange,
-                    uint32_t /* bitrate */,
-                    uint32_t /* framerate */)
-
-//------------------------------------------------------------------------------
-// Accelerated Video Encoder Host Messages
-// These messages are sent from GPU process to Renderer process.
-
-// Notify renderer of the input/output buffer requirements of the encoder.
-IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
-                    uint32_t /* input_count */,
-                    gfx::Size /* input_coded_size */,
-                    uint32_t /* output_buffer_size */)
-
-// Notify the renderer that the encoder has finished using an input buffer.
-// There is no congruent entry point in the media::VideoEncodeAccelerator
-// interface, in VEA this same done condition is indicated by dropping the
-// reference to the media::VideoFrame passed to VEA::Encode().
-IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
-                    int32_t /* frame_id */)
-
-// Notify the renderer that an output buffer has been filled with encoded data.
-IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
-                    int32_t /* bitstream_buffer_id */,
-                    uint32_t /* payload_size */,
-                    bool /* key_frame */)
-
-// Report error condition.
-IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyError,
-                    media::VideoEncodeAccelerator::Error /* error */)
-
-// Send destroy request to the encoder.
-IPC_MESSAGE_ROUTED0(AcceleratedVideoEncoderMsg_Destroy)
-
-//------------------------------------------------------------------------------
-// Accelerated JPEG Decoder Messages
-// These messages are sent from the Browser process to GPU process.
-
-// Decode one JPEG image from shared memory |input_buffer_handle| with size
-// |input_buffer_size|. The input buffer is associated with |input_buffer_id|
-// and the size of JPEG image is |coded_size|. Decoded I420 frame data will
-// be put onto shared memory associated with |output_video_frame_handle|
-// with size limit |output_buffer_size|.
-IPC_MESSAGE_ROUTED1(AcceleratedJpegDecoderMsg_Decode,
-                    AcceleratedJpegDecoderMsg_Decode_Params)
-
-// Send destroy request to the decoder.
-IPC_MESSAGE_ROUTED0(AcceleratedJpegDecoderMsg_Destroy)
-
-//------------------------------------------------------------------------------
-// Accelerated JPEG Decoder Host Messages
-// These messages are sent from the GPU process to Browser process.
-//
-// Report decode status.
-IPC_MESSAGE_ROUTED2(AcceleratedJpegDecoderHostMsg_DecodeAck,
-                    int32_t, /* bitstream_buffer_id */
-                    media::JpegDecodeAccelerator::Error /* error */)
diff --git a/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc b/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc
index ba0bd94d..3cd492dfc 100644
--- a/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc
+++ b/content/common/gpu/media/gpu_jpeg_decode_accelerator.cc
@@ -17,6 +17,7 @@
 #include "build/build_config.h"
 #include "content/common/gpu/gpu_channel.h"
 #include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/media_messages.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/message_filter.h"
 #include "media/filters/jpeg_parser.h"
diff --git a/content/common/gpu/media/gpu_video_decode_accelerator.cc b/content/common/gpu/media/gpu_video_decode_accelerator.cc
index 1ec0e5a..c500620b 100644
--- a/content/common/gpu/media/gpu_video_decode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_decode_accelerator.cc
@@ -17,8 +17,8 @@
 #include "build/build_config.h"
 
 #include "content/common/gpu/gpu_channel.h"
-#include "content/common/gpu/gpu_messages.h"
 #include "content/common/gpu/media/gpu_video_accelerator_util.h"
+#include "content/common/gpu/media_messages.h"
 #include "content/public/common/content_switches.h"
 #include "gpu/command_buffer/common/command_buffer.h"
 #include "ipc/ipc_message_macros.h"
diff --git a/content/common/gpu/media/gpu_video_encode_accelerator.cc b/content/common/gpu/media/gpu_video_encode_accelerator.cc
index 948542e..bf46683 100644
--- a/content/common/gpu/media/gpu_video_encode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc
@@ -13,8 +13,8 @@
 #include "build/build_config.h"
 #include "content/common/gpu/client/gpu_memory_buffer_impl.h"
 #include "content/common/gpu/gpu_channel.h"
-#include "content/common/gpu/gpu_messages.h"
 #include "content/common/gpu/media/gpu_video_accelerator_util.h"
+#include "content/common/gpu/media_messages.h"
 #include "content/public/common/content_switches.h"
 #include "ipc/ipc_message_macros.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/content/common/gpu/media_messages.h b/content/common/gpu/media_messages.h
new file mode 100644
index 0000000..a73c5a8
--- /dev/null
+++ b/content/common/gpu/media_messages.h
@@ -0,0 +1,266 @@
+// 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.
+
+// Multiply-included message file, hence no include guard here, but see below
+// for a much smaller-than-usual include guard section.
+
+#include "gpu/config/gpu_info.h"
+#include "ipc/ipc_message_macros.h"
+#include "ipc/param_traits_macros.h"
+#include "media/base/decrypt_config.h"
+#include "media/base/video_types.h"
+#include "media/video/jpeg_decode_accelerator.h"
+#include "media/video/video_decode_accelerator.h"
+#include "media/video/video_encode_accelerator.h"
+
+#undef IPC_MESSAGE_EXPORT
+#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
+
+#define IPC_MESSAGE_START MediaMsgStart
+
+IPC_ENUM_TRAITS_MAX_VALUE(media::JpegDecodeAccelerator::Error,
+                          media::JpegDecodeAccelerator::LARGEST_ERROR_ENUM)
+IPC_ENUM_TRAITS_MAX_VALUE(media::VideoEncodeAccelerator::Error,
+                          media::VideoEncodeAccelerator::kErrorMax)
+IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodecProfile,
+                              media::VIDEO_CODEC_PROFILE_MIN,
+                              media::VIDEO_CODEC_PROFILE_MAX)
+
+IPC_STRUCT_BEGIN(AcceleratedJpegDecoderMsg_Decode_Params)
+  IPC_STRUCT_MEMBER(int32_t, input_buffer_id)
+  IPC_STRUCT_MEMBER(gfx::Size, coded_size)
+  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, input_buffer_handle)
+  IPC_STRUCT_MEMBER(uint32_t, input_buffer_size)
+  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, output_video_frame_handle)
+  IPC_STRUCT_MEMBER(uint32_t, output_buffer_size)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(AcceleratedVideoDecoderMsg_Decode_Params)
+  IPC_STRUCT_MEMBER(int32_t, bitstream_buffer_id)
+  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, buffer_handle)
+  IPC_STRUCT_MEMBER(uint32_t, size)
+  IPC_STRUCT_MEMBER(base::TimeDelta, presentation_timestamp)
+  IPC_STRUCT_MEMBER(std::string, key_id)
+  IPC_STRUCT_MEMBER(std::string, iv)
+  IPC_STRUCT_MEMBER(std::vector<media::SubsampleEntry>, subsamples)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params)
+  IPC_STRUCT_MEMBER(int32_t, frame_id)
+  IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
+  IPC_STRUCT_MEMBER(base::SharedMemoryHandle, buffer_handle)
+  IPC_STRUCT_MEMBER(uint32_t, buffer_offset)
+  IPC_STRUCT_MEMBER(uint32_t, buffer_size)
+  IPC_STRUCT_MEMBER(bool, force_keyframe)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(AcceleratedVideoEncoderMsg_Encode_Params2)
+  IPC_STRUCT_MEMBER(int32_t, frame_id)
+  IPC_STRUCT_MEMBER(base::TimeDelta, timestamp)
+  IPC_STRUCT_MEMBER(std::vector<gfx::GpuMemoryBufferHandle>,
+                    gpu_memory_buffer_handles)
+  IPC_STRUCT_MEMBER(gfx::Size, size)
+  IPC_STRUCT_MEMBER(bool, force_keyframe)
+IPC_STRUCT_END()
+
+IPC_STRUCT_TRAITS_BEGIN(media::VideoDecodeAccelerator::Config)
+  IPC_STRUCT_TRAITS_MEMBER(profile)
+  IPC_STRUCT_TRAITS_MEMBER(is_encrypted)
+  IPC_STRUCT_TRAITS_MEMBER(surface_id)
+IPC_STRUCT_TRAITS_END()
+
+IPC_STRUCT_TRAITS_BEGIN(gpu::VideoDecodeAcceleratorSupportedProfile)
+  IPC_STRUCT_TRAITS_MEMBER(profile)
+  IPC_STRUCT_TRAITS_MEMBER(max_resolution)
+  IPC_STRUCT_TRAITS_MEMBER(min_resolution)
+IPC_STRUCT_TRAITS_END()
+
+IPC_STRUCT_TRAITS_BEGIN(gpu::VideoDecodeAcceleratorCapabilities)
+  IPC_STRUCT_TRAITS_MEMBER(supported_profiles)
+  IPC_STRUCT_TRAITS_MEMBER(flags)
+IPC_STRUCT_TRAITS_END()
+
+IPC_STRUCT_TRAITS_BEGIN(gpu::VideoEncodeAcceleratorSupportedProfile)
+  IPC_STRUCT_TRAITS_MEMBER(profile)
+  IPC_STRUCT_TRAITS_MEMBER(max_resolution)
+  IPC_STRUCT_TRAITS_MEMBER(max_framerate_numerator)
+  IPC_STRUCT_TRAITS_MEMBER(max_framerate_denominator)
+IPC_STRUCT_TRAITS_END()
+
+IPC_STRUCT_TRAITS_BEGIN(media::SubsampleEntry)
+  IPC_STRUCT_TRAITS_MEMBER(clear_bytes)
+  IPC_STRUCT_TRAITS_MEMBER(cypher_bytes)
+IPC_STRUCT_TRAITS_END()
+
+// Create and initialize a hardware video decoder using the specified route_id.
+// Created decoders should be freed with AcceleratedVideoDecoderMsg_Destroy when
+// no longer needed.
+IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_CreateVideoDecoder,
+                           media::VideoDecodeAccelerator::Config, /* config */
+                           int32_t,                               /* route_id */
+                           bool /* succeeded */)
+
+// Create and initialize a hardware video encoder using the specified route_id.
+// Created encoders should be freed with AcceleratedVideoEncoderMsg_Destroy when
+// no longer needed.
+IPC_SYNC_MESSAGE_ROUTED5_1(GpuCommandBufferMsg_CreateVideoEncoder,
+                           media::VideoPixelFormat /* input_format */,
+                           gfx::Size /* input_visible_size */,
+                           media::VideoCodecProfile /* output_profile */,
+                           uint32_t /* initial_bitrate */,
+                           int32_t, /* route_id */
+                           bool /* succeeded */)
+
+//------------------------------------------------------------------------------
+// Accelerated Video Decoder Messages
+// These messages are sent from Renderer process to GPU process.
+
+// Set a CDM on the decoder to handle encrypted buffers.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_SetCdm, int32_t /* CDM ID */)
+
+// Send input buffer for decoding.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_Decode,
+                    AcceleratedVideoDecoderMsg_Decode_Params)
+
+// Give the texture IDs for the textures the decoder will use for output.
+IPC_MESSAGE_ROUTED2(AcceleratedVideoDecoderMsg_AssignPictureBuffers,
+                    std::vector<int32_t>,  /* Picture buffer ID */
+                    std::vector<uint32_t>) /* Texture ID */
+
+// Send from Renderer process to the GPU process to recycle the given picture
+// buffer for further decoding.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_ReusePictureBuffer,
+                    int32_t) /* Picture buffer ID */
+
+// Send flush request to the decoder.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Flush)
+
+// Send reset request to the decoder.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Reset)
+
+// Send destroy request to the decoder.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Destroy)
+
+//------------------------------------------------------------------------------
+// Accelerated Video Decoder Host Messages
+// These messages are sent from GPU process to Renderer process.
+// Inform AcceleratedVideoDecoderHost that AcceleratedVideoDecoder has been
+// created.
+
+// Notify the CDM setting result.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_CdmAttached,
+                    bool) /* success */
+
+// Accelerated video decoder has consumed input buffer from transfer buffer.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
+                    int32_t) /* Processed buffer ID */
+
+// Allocate video frames for output of the hardware video decoder.
+IPC_MESSAGE_ROUTED3(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
+                    int32_t,   /* Number of video frames to generate */
+                    gfx::Size, /* Requested size of buffer */
+                    uint32_t)  /* Texture target */
+
+// Decoder reports that a picture is ready and buffer does not need to be passed
+// back to the decoder.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer,
+                    int32_t) /* Picture buffer ID */
+
+// Decoder reports that a picture is ready.
+IPC_MESSAGE_ROUTED4(AcceleratedVideoDecoderHostMsg_PictureReady,
+                    int32_t,   /* Picture buffer ID */
+                    int32_t,   /* Bitstream buffer ID */
+                    gfx::Rect, /* Visible rectangle */
+                    bool)      /* Buffer is HW overlay capable */
+
+// Confirm decoder has been flushed.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_FlushDone)
+
+// Confirm decoder has been reset.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_ResetDone)
+
+// Video decoder has encountered an error.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_ErrorNotification,
+                    uint32_t /* Error ID */)
+
+//------------------------------------------------------------------------------
+// Accelerated Video Encoder Messages
+// These messages are sent from the Renderer process to GPU process.
+
+// Queue a video frame to the encoder to encode. |frame_id| will be returned
+// by AcceleratedVideoEncoderHostMsg_NotifyInputDone.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode,
+                    AcceleratedVideoEncoderMsg_Encode_Params)
+
+// Queue a GpuMemoryBuffer backed video frame to the encoder to encode.
+// |frame_id| will be returned by
+// AcceleratedVideoEncoderHostMsg_NotifyInputDone.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderMsg_Encode2,
+                    AcceleratedVideoEncoderMsg_Encode_Params2)
+
+// Queue a buffer to the encoder for use in returning output.  |buffer_id| will
+// be returned by AcceleratedVideoEncoderHostMsg_BitstreamBufferReady.
+IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
+                    int32_t /* buffer_id */,
+                    base::SharedMemoryHandle /* buffer_handle */,
+                    uint32_t /* buffer_size */)
+
+// Request a runtime encoding parameter change.
+IPC_MESSAGE_ROUTED2(AcceleratedVideoEncoderMsg_RequestEncodingParametersChange,
+                    uint32_t /* bitrate */,
+                    uint32_t /* framerate */)
+
+//------------------------------------------------------------------------------
+// Accelerated Video Encoder Host Messages
+// These messages are sent from GPU process to Renderer process.
+
+// Notify renderer of the input/output buffer requirements of the encoder.
+IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
+                    uint32_t /* input_count */,
+                    gfx::Size /* input_coded_size */,
+                    uint32_t /* output_buffer_size */)
+
+// Notify the renderer that the encoder has finished using an input buffer.
+// There is no congruent entry point in the media::VideoEncodeAccelerator
+// interface, in VEA this same done condition is indicated by dropping the
+// reference to the media::VideoFrame passed to VEA::Encode().
+IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
+                    int32_t /* frame_id */)
+
+// Notify the renderer that an output buffer has been filled with encoded data.
+IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
+                    int32_t /* bitstream_buffer_id */,
+                    uint32_t /* payload_size */,
+                    bool /* key_frame */)
+
+// Report error condition.
+IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyError,
+                    media::VideoEncodeAccelerator::Error /* error */)
+
+// Send destroy request to the encoder.
+IPC_MESSAGE_ROUTED0(AcceleratedVideoEncoderMsg_Destroy)
+
+//------------------------------------------------------------------------------
+// Accelerated JPEG Decoder Messages
+// These messages are sent from the Browser process to GPU process.
+
+// Decode one JPEG image from shared memory |input_buffer_handle| with size
+// |input_buffer_size|. The input buffer is associated with |input_buffer_id|
+// and the size of JPEG image is |coded_size|. Decoded I420 frame data will
+// be put onto shared memory associated with |output_video_frame_handle|
+// with size limit |output_buffer_size|.
+IPC_MESSAGE_ROUTED1(AcceleratedJpegDecoderMsg_Decode,
+                    AcceleratedJpegDecoderMsg_Decode_Params)
+
+// Send destroy request to the decoder.
+IPC_MESSAGE_ROUTED0(AcceleratedJpegDecoderMsg_Destroy)
+
+//------------------------------------------------------------------------------
+// Accelerated JPEG Decoder Host Messages
+// These messages are sent from the GPU process to Browser process.
+//
+// Report decode status.
+IPC_MESSAGE_ROUTED2(AcceleratedJpegDecoderHostMsg_DecodeAck,
+                    int32_t, /* bitstream_buffer_id */
+                    media::JpegDecodeAccelerator::Error /* error */)
diff --git a/content/content.gyp b/content/content.gyp
index 232814f6..1cda568 100644
--- a/content/content.gyp
+++ b/content/content.gyp
@@ -23,8 +23,8 @@
   },
   'targets': [
     {
-      # GN version: //content/renderer:renderer_features
-      'target_name': 'renderer_features',
+      # GN version: //content/public/common:features
+      'target_name': 'common_features',
       'includes': [
         '../build/buildflag_header.gypi',
         '../third_party/webrtc/build/common.gypi',
@@ -37,7 +37,7 @@
         # TODO(hbos): crbug.com/584219
         ['1==1', {
           'variables': {
-            'buildflag_header_path': 'content/renderer/renderer_features.h',
+            'buildflag_header_path': 'content/public/common/features.h',
             'buildflag_flags': [
               'RTC_USE_H264=<(rtc_use_h264)',
             ],
@@ -45,6 +45,19 @@
         }],
       ],
     },
+    {
+      # GN version: //content/public/common:feature_h264_with_openh264_ffmpeg
+      'target_name': 'feature_h264_with_openh264_ffmpeg',
+      'type': 'static_library',
+      'include_dirs': [ '<@(DEPTH)' ],
+      'dependencies': [
+        'common_features',
+      ],
+      'sources': [
+        'public/common/feature_h264_with_openh264_ffmpeg.cc',
+        'public/common/feature_h264_with_openh264_ffmpeg.h',
+      ],
+    },
   ],
   'includes': [
     '../build/win_precompile.gypi',
@@ -265,10 +278,10 @@
           ],
           'dependencies': [
             '../third_party/webrtc/modules/modules.gyp:webrtc_h264',
+            'common_features',
             'content_child',
             'content_common',
             'content_resources',
-            'renderer_features',
           ],
           'export_dependent_settings': [
             'content_common',
@@ -306,8 +319,8 @@
           'variables': { 'enable_wexit_time_destructors': 1, },
           'dependencies': [
             '../third_party/webrtc/modules/modules.gyp:webrtc_h264',
+            'common_features',
             'content_resources',
-            'renderer_features',
           ],
           'conditions': [
             ['chromium_enable_vtune_jit_for_v8==1', {
diff --git a/content/content_child.gypi b/content/content_child.gypi
index 37fad58..3feb6cfe 100644
--- a/content/content_child.gypi
+++ b/content/content_child.gypi
@@ -262,12 +262,6 @@
       'child/web_database_observer_impl.h',
       'child/web_discardable_memory_impl.cc',
       'child/web_discardable_memory_impl.h',
-      'child/web_memory_allocator_dump_impl.cc',
-      'child/web_memory_allocator_dump_impl.h',
-      'child/web_memory_dump_provider_adapter.cc',
-      'child/web_memory_dump_provider_adapter.h',
-      'child/web_process_memory_dump_impl.cc',
-      'child/web_process_memory_dump_impl.h',
       'child/web_url_loader_impl.cc',
       'child/web_url_loader_impl.h',
       'child/web_url_request_util.cc',
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 4b9ec41..dad9e15 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -45,6 +45,7 @@
     '../ui/gl/gl.gyp:gl',
     '../ui/shell_dialogs/shell_dialogs.gyp:shell_dialogs',
     '../url/url.gyp:url_lib',
+    'content.gyp:common_features',
     'content_common_mojo_bindings.gyp:content_common_mojo_bindings',
   ],
   'include_dirs': [
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index b017e22..4b6cf8d 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -127,8 +127,6 @@
       'renderer/android/synchronous_compositor_registry.h',
       'renderer/background_sync/background_sync_client_impl.cc',
       'renderer/background_sync/background_sync_client_impl.h',
-      'renderer/battery_status/battery_status_dispatcher.cc',
-      'renderer/battery_status/battery_status_dispatcher.h',
       'renderer/bluetooth/bluetooth_dispatcher.cc',
       'renderer/bluetooth/bluetooth_dispatcher.h',
       'renderer/bluetooth/bluetooth_message_filter.cc',
@@ -773,7 +771,6 @@
       'renderer/p2p/socket_client_impl.h',
       'renderer/p2p/socket_dispatcher.cc',
       'renderer/p2p/socket_dispatcher.h',
-      'renderer/renderer_features.h',
     ],
     # Stuff only used when both WebRTC and plugins are enabled.
     'private_renderer_plugin_webrtc_sources': [
@@ -848,6 +845,8 @@
         '../third_party/webrtc/modules/modules.gyp:audio_device',
         '../third_party/webrtc/modules/modules.gyp:audio_processing',
         '../third_party/webrtc/p2p/p2p.gyp:libstunprober',
+        '<(DEPTH)/content/content.gyp:common_features',
+        '<(DEPTH)/content/content.gyp:feature_h264_with_openh264_ffmpeg',
         '<(DEPTH)/crypto/crypto.gyp:crypto',
       ],
       'sources': [
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index a7e31a64..43085aa 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -648,7 +648,6 @@
       'child/site_isolation_stats_gatherer_unittest.cc',
       'child/v8_value_converter_impl_unittest.cc',
       'child/web_data_consumer_handle_impl_unittest.cc',
-      'child/web_process_memory_dump_impl_unittest.cc',
       'child/web_url_loader_impl_unittest.cc',
       'child/worker_thread_registry_unittest.cc',
       'common/android/address_parser_unittest.cc',
@@ -697,7 +696,6 @@
       'common/webplugininfo_unittest.cc',
       'renderer/android/email_detector_unittest.cc',
       'renderer/android/phone_number_detector_unittest.cc',
-      'renderer/battery_status/battery_status_dispatcher_unittest.cc',
       'renderer/bmp_image_decoder_unittest.cc',
       'renderer/device_sensors/device_light_event_pump_unittest.cc',
       'renderer/device_sensors/device_motion_event_pump_unittest.cc',
diff --git a/content/public/child/child_thread.h b/content/public/child/child_thread.h
index 6afc0cb..94eb321 100644
--- a/content/public/child/child_thread.h
+++ b/content/public/child/child_thread.h
@@ -5,6 +5,9 @@
 #ifndef CONTENT_PUBLIC_CHILD_CHILD_THREAD_H_
 #define CONTENT_PUBLIC_CHILD_CHILD_THREAD_H_
 
+#include <string>
+
+#include "base/logging.h"
 #include "build/build_config.h"
 #include "content/common/content_export.h"
 #include "ipc/ipc_sender.h"
@@ -13,6 +16,10 @@
 #include <windows.h>
 #endif
 
+namespace base {
+struct UserMetricsAction;
+}
+
 namespace content {
 
 // An abstract base class that contains logic shared between most child
@@ -33,6 +40,25 @@
   // Release cached font.
   virtual void ReleaseCachedFonts() = 0;
 #endif
+
+  // Sends over a base::UserMetricsAction to be recorded by user metrics as
+  // an action. Once a new user metric is added, run
+  //   tools/metrics/actions/extract_actions.py
+  // to add the metric to actions.xml, then update the <owner>s and
+  // <description> sections. Make sure to include the actions.xml file when you
+  // upload your code for review!
+  //
+  // WARNING: When using base::UserMetricsAction, base::UserMetricsAction
+  // and a string literal parameter must be on the same line, e.g.
+  //   RenderThread::Get()->RecordAction(
+  //       base::UserMetricsAction("my extremely long action name"));
+  // because otherwise our processing scripts won't pick up on new actions.
+  virtual void RecordAction(const base::UserMetricsAction& action) = 0;
+
+  // Sends over a string to be recorded by user metrics as a computed action.
+  // When you use this you need to also update the rules for extracting known
+  // actions in chrome/tools/extract_actions.py.
+  virtual void RecordComputedAction(const std::string& action) = 0;
 };
 
 }  // namespace content
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index b8a7cd1..83d47d6e 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -2,10 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/buildflag_header.gni")
 import("//build/config/chromecast_build.gni")
 import("//build/config/features.gni")
 import("//content/common/common.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
+import("//third_party/webrtc/build/webrtc.gni")
 
 # See //content/BUILD.gn for how this works.
 group("common") {
@@ -119,3 +121,19 @@
     "service_worker_event_status.mojom",
   ]
 }
+
+buildflag_header("features") {
+  header = "features.h"
+
+  flags = [ "RTC_USE_H264=$rtc_use_h264" ]
+}
+
+source_set("feature_h264_with_openh264_ffmpeg") {
+  deps = [
+    ":features",
+  ]
+  sources = [
+    "feature_h264_with_openh264_ffmpeg.cc",
+    "feature_h264_with_openh264_ffmpeg.h",
+  ]
+}
diff --git a/content/public/common/feature_h264_with_openh264_ffmpeg.cc b/content/public/common/feature_h264_with_openh264_ffmpeg.cc
new file mode 100644
index 0000000..b13cfdf
--- /dev/null
+++ b/content/public/common/feature_h264_with_openh264_ffmpeg.cc
@@ -0,0 +1,17 @@
+// 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.
+
+#include "content/public/common/feature_h264_with_openh264_ffmpeg.h"
+
+namespace content {
+
+#if BUILDFLAG(RTC_USE_H264)
+
+const base::Feature kWebRtcH264WithOpenH264FFmpeg {
+  "WebRTC-H264WithOpenH264FFmpeg", base::FEATURE_DISABLED_BY_DEFAULT
+};
+
+#endif  // BUILDFLAG(RTC_USE_H264)
+
+} // namespace content
diff --git a/content/public/common/feature_h264_with_openh264_ffmpeg.h b/content/public/common/feature_h264_with_openh264_ffmpeg.h
new file mode 100644
index 0000000..ba21bd08
--- /dev/null
+++ b/content/public/common/feature_h264_with_openh264_ffmpeg.h
@@ -0,0 +1,22 @@
+// 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 CONTENT_PUBLIC_COMMON_FEATURE_H264_WITH_OPENH264_FFMPEG_H_
+#define CONTENT_PUBLIC_COMMON_FEATURE_H264_WITH_OPENH264_FFMPEG_H_
+
+#include "base/feature_list.h"
+#include "content/public/common/features.h"
+
+namespace content {
+
+#if BUILDFLAG(RTC_USE_H264)
+
+// Run-time feature for the |rtc_use_h264| encoder/decoder.
+extern const base::Feature kWebRtcH264WithOpenH264FFmpeg;
+
+#endif  // BUILDFLAG(RTC_USE_H264)
+
+} // namespace content
+
+#endif  // CONTENT_PUBLIC_COMMON_FEATURE_H264_WITH_OPENH264_FFMPEG_H_
diff --git a/content/public/renderer/BUILD.gn b/content/public/renderer/BUILD.gn
index 719eadf..c6bcae1d 100644
--- a/content/public/renderer/BUILD.gn
+++ b/content/public/renderer/BUILD.gn
@@ -49,7 +49,11 @@
         rebase_path(content_renderer_gypi_values.public_renderer_webrtc_sources,
                     ".",
                     "//content")
-    deps += [ "//third_party/webrtc" ]
+    deps += [
+      "//content/public/common:feature_h264_with_openh264_ffmpeg",
+      "//content/public/common:features",
+      "//third_party/webrtc",
+    ]
   }
 
   if (enable_plugins) {
diff --git a/content/public/renderer/render_thread.h b/content/public/renderer/render_thread.h
index 76cb48f..97cbda1 100644
--- a/content/public/renderer/render_thread.h
+++ b/content/public/renderer/render_thread.h
@@ -79,25 +79,6 @@
   // initialization.
   virtual void EnsureWebKitInitialized() = 0;
 
-  // Sends over a base::UserMetricsAction to be recorded by user metrics as
-  // an action. Once a new user metric is added, run
-  //   tools/metrics/actions/extract_actions.py
-  // to add the metric to actions.xml, then update the <owner>s and
-  // <description> sections. Make sure to include the actions.xml file when you
-  // upload your code for review!
-  //
-  // WARNING: When using base::UserMetricsAction, base::UserMetricsAction
-  // and a string literal parameter must be on the same line, e.g.
-  //   RenderThread::Get()->RecordAction(
-  //       base::UserMetricsAction("my extremely long action name"));
-  // because otherwise our processing scripts won't pick up on new actions.
-  virtual void RecordAction(const base::UserMetricsAction& action) = 0;
-
-  // Sends over a string to be recorded by user metrics as a computed action.
-  // When you use this you need to also update the rules for extracting known
-  // actions in chrome/tools/extract_actions.py.
-  virtual void RecordComputedAction(const std::string& action) = 0;
-
   // Asks the host to create a block of shared memory for the renderer.
   // The shared memory allocated by the host is returned back.
   virtual scoped_ptr<base::SharedMemory> HostAllocateSharedMemoryBuffer(
diff --git a/content/public/test/layouttest_support.h b/content/public/test/layouttest_support.h
index a3171ba..402fd04 100644
--- a/content/public/test/layouttest_support.h
+++ b/content/public/test/layouttest_support.h
@@ -17,7 +17,6 @@
 class GURL;
 
 namespace blink {
-class WebBatteryStatus;
 class WebDeviceMotionData;
 class WebDeviceOrientationData;
 class WebGamepad;
@@ -79,9 +78,6 @@
 // a listener through BlinkPlatformImpl::setDeviceOrientationListener().
 void SetMockDeviceOrientationData(const blink::WebDeviceOrientationData& data);
 
-// Notifies blink that battery status has changed.
-void MockBatteryStatusChanged(const blink::WebBatteryStatus& status);
-
 // Returns the length of the local session history of a render view.
 int GetLocalSessionHistoryLength(RenderView* render_view);
 
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index c4f4510..5ca9602d 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -4,10 +4,8 @@
 
 import("//build/config/features.gni")
 import("//build/config/ui.gni")
-import("//build/buildflag_header.gni")
 import("//content/renderer/renderer.gni")
 import("//media/media_options.gni")
-import("//third_party/webrtc/build/webrtc.gni")
 
 source_set("renderer") {
   # Only the public target should depend on this. All other targets (even
@@ -26,7 +24,6 @@
   defines = []
 
   deps = [
-    ":renderer_features",
     "//base:i18n",
     "//cc",
     "//cc/blink",
@@ -40,6 +37,8 @@
     "//content/common:mojo_bindings",
     "//content/public/child:child_sources",
     "//content/public/common:common_sources",
+    "//content/public/common:feature_h264_with_openh264_ffmpeg",
+    "//content/public/common:features",
     "//content/public/common:mojo_bindings",
     "//crypto:platform",
     "//device/battery:mojo_bindings",
@@ -244,9 +243,3 @@
     deps += [ "//ui/ozone" ]
   }
 }
-
-buildflag_header("renderer_features") {
-  header = "renderer_features.h"
-
-  flags = [ "RTC_USE_H264=$rtc_use_h264" ]
-}
diff --git a/content/renderer/battery_status/battery_status_dispatcher.cc b/content/renderer/battery_status/battery_status_dispatcher.cc
deleted file mode 100644
index 1034cb3..0000000
--- a/content/renderer/battery_status/battery_status_dispatcher.cc
+++ /dev/null
@@ -1,49 +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.
-
-#include "content/renderer/battery_status/battery_status_dispatcher.h"
-
-#include "content/public/common/service_registry.h"
-#include "content/public/renderer/render_thread.h"
-#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
-
-namespace content {
-
-BatteryStatusDispatcher::BatteryStatusDispatcher(
-    blink::WebBatteryStatusListener* listener)
-    : listener_(listener) {
-  DCHECK(listener_);
-
-  if (ServiceRegistry* registry = RenderThread::Get()->GetServiceRegistry()) {
-    // registry can be null during testing.
-    registry->ConnectToRemoteService(mojo::GetProxy(&monitor_));
-    QueryNextStatus();
-  }
-}
-
-BatteryStatusDispatcher::~BatteryStatusDispatcher() {
-}
-
-void BatteryStatusDispatcher::QueryNextStatus() {
-  monitor_->QueryNextStatus(
-      base::Bind(&BatteryStatusDispatcher::DidChange, base::Unretained(this)));
-}
-
-void BatteryStatusDispatcher::DidChange(
-    device::BatteryStatusPtr battery_status) {
-  // monitor_ can be null during testing.
-  if (monitor_)
-    QueryNextStatus();
-
-  DCHECK(battery_status);
-
-  blink::WebBatteryStatus web_battery_status;
-  web_battery_status.charging = battery_status->charging;
-  web_battery_status.chargingTime = battery_status->charging_time;
-  web_battery_status.dischargingTime = battery_status->discharging_time;
-  web_battery_status.level = battery_status->level;
-  listener_->updateBatteryStatus(web_battery_status);
-}
-
-}  // namespace content
diff --git a/content/renderer/battery_status/battery_status_dispatcher.h b/content/renderer/battery_status/battery_status_dispatcher.h
deleted file mode 100644
index f117a4b..0000000
--- a/content/renderer/battery_status/battery_status_dispatcher.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 CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
-#define CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "content/common/content_export.h"
-#include "device/battery/battery_monitor.mojom.h"
-
-namespace blink {
-class WebBatteryStatusListener;
-}
-
-namespace content {
-
-class CONTENT_EXPORT BatteryStatusDispatcher {
- public:
-  explicit BatteryStatusDispatcher(blink::WebBatteryStatusListener* listener);
-  ~BatteryStatusDispatcher();
-
- private:
-  friend class BatteryStatusDispatcherTest;
-
-  void QueryNextStatus();
-  void DidChange(device::BatteryStatusPtr battery_status);
-
-  device::BatteryMonitorPtr monitor_;
-  blink::WebBatteryStatusListener* listener_;
-
-  DISALLOW_COPY_AND_ASSIGN(BatteryStatusDispatcher);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
diff --git a/content/renderer/battery_status/battery_status_dispatcher_unittest.cc b/content/renderer/battery_status/battery_status_dispatcher_unittest.cc
deleted file mode 100644
index 5af3445..0000000
--- a/content/renderer/battery_status/battery_status_dispatcher_unittest.cc
+++ /dev/null
@@ -1,83 +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.
-
-#include "content/renderer/battery_status/battery_status_dispatcher.h"
-
-#include <utility>
-
-#include "base/macros.h"
-#include "content/public/test/mock_render_thread.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
-
-namespace content {
-
-class MockBatteryStatusListener : public blink::WebBatteryStatusListener {
- public:
-  MockBatteryStatusListener() : did_change_battery_status_(false) {}
-  ~MockBatteryStatusListener() override {}
-
-  // blink::WebBatteryStatusListener method.
-  void updateBatteryStatus(const blink::WebBatteryStatus& status) override {
-    status_ = status;
-    did_change_battery_status_ = true;
-  }
-
-  const blink::WebBatteryStatus& status() const { return status_; }
-  bool did_change_battery_status() const { return did_change_battery_status_; }
-
- private:
-  bool did_change_battery_status_;
-  blink::WebBatteryStatus status_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockBatteryStatusListener);
-};
-
-class BatteryStatusDispatcherTest : public testing::Test {
- public:
-  void UpdateBatteryStatus(const device::BatteryStatus& status) {
-    device::BatteryStatusPtr status_ptr(device::BatteryStatus::New());
-    *status_ptr = status;
-    dispatcher_->DidChange(std::move(status_ptr));
-  }
-
-  const MockBatteryStatusListener& listener() const {
-    return listener_;
-  }
-
- protected:
-  void SetUp() override {
-    dispatcher_.reset(new BatteryStatusDispatcher(&listener_));
-  }
-
- private:
-  // We need to create a MockRenderThread so RenderThread::Get() doesn't return
-  // null.
-  MockRenderThread render_thread_;
-  MockBatteryStatusListener listener_;
-  scoped_ptr<BatteryStatusDispatcher> dispatcher_;
-};
-
-TEST_F(BatteryStatusDispatcherTest, UpdateListener) {
-  // TODO(darin): This test isn't super interesting. It just exercises
-  // conversion b/w device::BatteryStatus and blink::WebBatteryStatus.
-
-  device::BatteryStatus status;
-  status.charging = true;
-  status.charging_time = 100;
-  status.discharging_time = 200;
-  status.level = 0.5;
-
-  UpdateBatteryStatus(status);
-
-  const blink::WebBatteryStatus& received_status = listener().status();
-  EXPECT_TRUE(listener().did_change_battery_status());
-  EXPECT_EQ(status.charging, received_status.charging);
-  EXPECT_EQ(status.charging_time, received_status.chargingTime);
-  EXPECT_EQ(status.discharging_time, received_status.dischargingTime);
-  EXPECT_EQ(status.level, received_status.level);
-}
-
-}  // namespace content
diff --git a/content/renderer/media/media_stream_audio_processor_options.cc b/content/renderer/media/media_stream_audio_processor_options.cc
index a822d9f..392bde6 100644
--- a/content/renderer/media/media_stream_audio_processor_options.cc
+++ b/content/renderer/media/media_stream_audio_processor_options.cc
@@ -199,7 +199,8 @@
 bool MediaAudioConstraints::IsValid() const {
   std::vector<std::string> legal_names(
       {constraints_.basic().mediaStreamSource.name(),
-       constraints_.basic().deviceId.name()});
+       constraints_.basic().deviceId.name(),
+       constraints_.basic().renderToAssociatedSink.name()});
   for (size_t j = 0; j < arraysize(kDefaultAudioConstraints); ++j) {
     legal_names.push_back(kDefaultAudioConstraints[j].key);
   }
diff --git a/content/renderer/media/media_stream_audio_processor_unittest.cc b/content/renderer/media/media_stream_audio_processor_unittest.cc
index 63ebe098..d8ae09276 100644
--- a/content/renderer/media/media_stream_audio_processor_unittest.cc
+++ b/content/renderer/media/media_stream_audio_processor_unittest.cc
@@ -324,7 +324,7 @@
   }
 }
 
-TEST_F(MediaStreamAudioProcessorTest, ValidateConstraints) {
+TEST_F(MediaStreamAudioProcessorTest, ValidateBadConstraints) {
   MockConstraintFactory constraint_factory;
   // Add a constraint that is not valid for audio.
   constraint_factory.basic().width.setExact(240);
@@ -333,6 +333,15 @@
   EXPECT_FALSE(audio_constraints.IsValid());
 }
 
+TEST_F(MediaStreamAudioProcessorTest, ValidateGoodConstraints) {
+  MockConstraintFactory constraint_factory;
+  // Check that the renderToAssociatedSink constraint is considered valid.
+  constraint_factory.basic().renderToAssociatedSink.setExact(true);
+  MediaAudioConstraints audio_constraints(
+      constraint_factory.CreateWebMediaConstraints(), 0);
+  EXPECT_TRUE(audio_constraints.IsValid());
+}
+
 MediaAudioConstraints MakeMediaAudioConstraints(
     const MockConstraintFactory& constraint_factory) {
   return MediaAudioConstraints(constraint_factory.CreateWebMediaConstraints(),
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
index 966a295..dbbe3b6 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
@@ -21,6 +21,8 @@
 #include "content/common/media/media_stream_messages.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/feature_h264_with_openh264_ffmpeg.h"
+#include "content/public/common/features.h"
 #include "content/public/common/renderer_preferences.h"
 #include "content/public/common/webrtc_ip_handling_policy.h"
 #include "content/public/renderer/content_renderer_client.h"
@@ -52,7 +54,6 @@
 #include "content/renderer/render_frame_impl.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/render_view_impl.h"
-#include "content/renderer/renderer_features.h"
 #include "crypto/openssl_util.h"
 #include "jingle/glue/thread_wrapper.h"
 #include "media/base/media_permission.h"
@@ -263,19 +264,15 @@
   DVLOG(1) << "PeerConnectionDependencyFactory::CreatePeerConnectionFactory()";
 
 #if BUILDFLAG(RTC_USE_H264)
-  // TODO(hbos): This is temporary. Disable the runtime effects of building with
-  // |rtc_use_h264|. We are planning to default the |rtc_use_h264| flag to
-  // |proprietary_codecs| so that it will be used by Chromium trybots. This
-  // would also make it used by Chrome, but this feature is not ready to be
-  // launched yet. An upcoming CL will add browser tests for H264. That CL will
-  // remove this line. It should remain disabled until tested.
-  webrtc::DisableRtcUseH264();
-  // When building with |rtc_use_h264|, |H264DecoderImpl| may be used which
-  // depends on FFmpeg, therefore we need to initialize FFmpeg before going
-  // further.
-  // TODO(hbos): Temporarily commented out due to webrtc::DisableRtcUseH264(),
-  // no need to initialize FFmpeg when |H264DecoderImpl| is disabled.
-  // media::FFmpegGlue::InitializeFFmpeg();
+  // Building /w |rtc_use_h264|, is the corresponding run-time feature enabled?
+  if (base::FeatureList::IsEnabled(kWebRtcH264WithOpenH264FFmpeg)) {
+    // |H264DecoderImpl| may be used which depends on FFmpeg, therefore we need
+    // to initialize FFmpeg before going further.
+    media::FFmpegGlue::InitializeFFmpeg();
+  } else {
+    // Feature is to be disabled, no need to make sure FFmpeg is initialized.
+    webrtc::DisableRtcUseH264();
+  }
 #endif
 
   base::MessageLoop::current()->AddDestructionObserver(this);
diff --git a/content/renderer/media/webrtc_audio_device_not_impl.cc b/content/renderer/media/webrtc_audio_device_not_impl.cc
index 234bf87..a86fca0 100644
--- a/content/renderer/media/webrtc_audio_device_not_impl.cc
+++ b/content/renderer/media/webrtc_audio_device_not_impl.cc
@@ -16,9 +16,8 @@
   return kMillisecondsBetweenProcessCalls - delta_time.InMilliseconds();
 }
 
-int32_t WebRtcAudioDeviceNotImpl::Process() {
+void WebRtcAudioDeviceNotImpl::Process() {
   last_process_time_ = base::TimeTicks::Now();
-  return 0;
 }
 
 int32_t WebRtcAudioDeviceNotImpl::RegisterEventObserver(
diff --git a/content/renderer/media/webrtc_audio_device_not_impl.h b/content/renderer/media/webrtc_audio_device_not_impl.h
index e755b61..f0291ed9 100644
--- a/content/renderer/media/webrtc_audio_device_not_impl.h
+++ b/content/renderer/media/webrtc_audio_device_not_impl.h
@@ -31,7 +31,7 @@
   // Only adding very basic support for now without triggering any callback
   // in the webrtc::AudioDeviceObserver interface.
   int64_t TimeUntilNextProcess() override;
-  int32_t Process() override;
+  void Process() override;
 
   // Methods in webrtc::AudioDeviceModule which are not yet implemented.
   // The idea is that we can move methods from this class to the real
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index c285e52..f2f2b1e7 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -180,8 +180,6 @@
   void SetResourceDispatcherDelegate(
       ResourceDispatcherDelegate* delegate) override;
   void EnsureWebKitInitialized() override;
-  void RecordAction(const base::UserMetricsAction& action) override;
-  void RecordComputedAction(const std::string& action) override;
   scoped_ptr<base::SharedMemory> HostAllocateSharedMemoryBuffer(
       size_t buffer_size) override;
   cc::SharedBitmapManager* GetSharedBitmapManager() override;
@@ -470,6 +468,8 @@
   // ChildThread
   bool OnControlMessageReceived(const IPC::Message& msg) override;
   void OnProcessBackgrounded(bool backgrounded) override;
+  void RecordAction(const base::UserMetricsAction& action) override;
+  void RecordComputedAction(const std::string& action) override;
 
   // GpuChannelHostFactory implementation:
   bool IsMainThread() override;
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index e2d537f0..5ef967ff 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -52,7 +52,6 @@
 #include "content/public/common/webplugininfo.h"
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/public/renderer/media_stream_api.h"
-#include "content/renderer/battery_status/battery_status_dispatcher.h"
 #include "content/renderer/cache_storage/webserviceworkercachestorage_impl.h"
 #include "content/renderer/device_sensors/device_light_event_pump.h"
 #include "content/renderer/device_sensors/device_motion_event_pump.h"
@@ -85,7 +84,6 @@
 #include "storage/common/quota/quota_types.h"
 #include "third_party/WebKit/public/platform/FilePathConversion.h"
 #include "third_party/WebKit/public/platform/URLConversion.h"
-#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
 #include "third_party/WebKit/public/platform/WebBlobRegistry.h"
 #include "third_party/WebKit/public/platform/WebDeviceLightListener.h"
 #include "third_party/WebKit/public/platform/WebFileInfo.h"
@@ -178,9 +176,6 @@
     g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER;
 base::LazyInstance<blink::WebDeviceOrientationData>::Leaky
     g_test_device_orientation_data = LAZY_INSTANCE_INITIALIZER;
-// Set in startListening() when running layout tests, unset in stopListening(),
-// not owned by us.
-blink::WebBatteryStatusListener* g_test_battery_status_listener = nullptr;
 
 }  // namespace
 
@@ -1158,28 +1153,31 @@
 void RendererBlinkPlatformImpl::SetPlatformEventObserverForTesting(
     blink::WebPlatformEventType type,
     scoped_ptr<PlatformEventObserverBase> observer) {
-  DCHECK(type != blink::WebPlatformEventTypeBattery);
-
   if (platform_event_observers_.Lookup(type))
     platform_event_observers_.Remove(type);
   platform_event_observers_.AddWithID(observer.release(), type);
 }
 
+void RendererBlinkPlatformImpl::connectToRemoteService(
+    const char* name,
+    mojo::ScopedMessagePipeHandle handle) {
+  // In the layout test mode, mock services should be used instead.
+  // TODO(yukishiino): We'd like to inject mock services implemented in
+  // JavaScript.  Remove the following hack once we support JS-bindings
+  // of Mojo and service mocking in JS.
+  if (RenderThreadImpl::current() &&
+      RenderThreadImpl::current()->layout_test_mode())
+    return;
+
+  if (ServiceRegistry* registry = RenderThread::Get()->GetServiceRegistry()) {
+    // registry can be null during testing.
+    registry->ConnectToRemoteService(name, std::move(handle));
+  }
+}
+
 void RendererBlinkPlatformImpl::startListening(
     blink::WebPlatformEventType type,
     blink::WebPlatformEventListener* listener) {
-  if (type == blink::WebPlatformEventTypeBattery) {
-    if (RenderThreadImpl::current() &&
-        RenderThreadImpl::current()->layout_test_mode()) {
-      g_test_battery_status_listener =
-          static_cast<blink::WebBatteryStatusListener*>(listener);
-    } else {
-      battery_status_dispatcher_.reset(new BatteryStatusDispatcher(
-          static_cast<blink::WebBatteryStatusListener*>(listener)));
-    }
-    return;
-  }
-
   PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type);
   if (!observer) {
     observer = CreatePlatformEventObserverFromType(type);
@@ -1239,12 +1237,6 @@
 
 void RendererBlinkPlatformImpl::stopListening(
     blink::WebPlatformEventType type) {
-  if (type == blink::WebPlatformEventTypeBattery) {
-    g_test_battery_status_listener = nullptr;
-    battery_status_dispatcher_.reset();
-    return;
-  }
-
   PlatformEventObserverBase* observer = platform_event_observers_.Lookup(type);
   if (!observer)
     return;
@@ -1269,15 +1261,6 @@
 
 //------------------------------------------------------------------------------
 
-void RendererBlinkPlatformImpl::MockBatteryStatusChangedForTesting(
-    const blink::WebBatteryStatus& status) {
-  if (!g_test_battery_status_listener)
-    return;
-  g_test_battery_status_listener->updateBatteryStatus(status);
-}
-
-//------------------------------------------------------------------------------
-
 blink::WebTrialTokenValidator*
 RendererBlinkPlatformImpl::trialTokenValidator() {
   return &trial_token_validator_;
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index dc6a81c..c054ee4 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -32,7 +32,6 @@
 }
 
 namespace blink {
-class WebBatteryStatus;
 class WebCanvasCaptureHandler;
 class WebDeviceMotionData;
 class WebDeviceOrientationData;
@@ -50,7 +49,6 @@
 }
 
 namespace content {
-class BatteryStatusDispatcher;
 class DeviceLightEventPump;
 class DeviceMotionEventPump;
 class DeviceOrientationEventPump;
@@ -178,6 +176,8 @@
   blink::WebString convertIDNToUnicode(
       const blink::WebString& host,
       const blink::WebString& languages) override;
+  void connectToRemoteService(const char* name,
+                              mojo::ScopedMessagePipeHandle handle) override;
   void startListening(blink::WebPlatformEventType,
                       blink::WebPlatformEventListener*) override;
   void stopListening(blink::WebPlatformEventType) override;
@@ -220,10 +220,6 @@
   static void SetMockDeviceOrientationDataForTesting(
       const blink::WebDeviceOrientationData& data);
 
-  // Notifies blink::WebBatteryStatusListener that battery status has changed.
-  void MockBatteryStatusChangedForTesting(
-      const blink::WebBatteryStatus& status);
-
   WebDatabaseObserverImpl* web_database_observer_impl() {
     return web_database_observer_impl_.get();
   }
@@ -290,8 +286,6 @@
 
   scoped_ptr<blink::WebScrollbarBehavior> web_scrollbar_behavior_;
 
-  scoped_ptr<BatteryStatusDispatcher> battery_status_dispatcher_;
-
   // Handle to the Vibration mojo service.
   device::VibrationManagerPtr vibration_manager_;
 
diff --git a/content/shell/browser/layout_test/blink_test_controller.cc b/content/shell/browser/layout_test/blink_test_controller.cc
index 59bdc20..43a7e5b 100644
--- a/content/shell/browser/layout_test/blink_test_controller.cc
+++ b/content/shell/browser/layout_test/blink_test_controller.cc
@@ -221,7 +221,8 @@
           base::CommandLine::ForCurrentProcess()->HasSwitch(
               switches::kEnableLeakDetection)),
       crash_when_leak_found_(false),
-      devtools_frontend_(NULL) {
+      devtools_frontend_(NULL),
+      render_process_host_observer_(this) {
   CHECK(!instance_);
   instance_ = this;
 
@@ -459,13 +460,18 @@
     RenderFrameHost* render_frame_host) {
   DCHECK(CalledOnValidThread());
 
+  // Monitor the new renderer process for crashes.
+  RenderProcessHost* render_process_host = render_frame_host->GetProcess();
+  if (!render_process_host_observer_.IsObserving(render_process_host))
+    render_process_host_observer_.Add(render_process_host);
+
   // Ignore hosts created for frames other than the main / top-level frame.
   if (render_frame_host->GetParent() != nullptr)
     return;
 
   // Might be kNullProcessHandle, in which case we will receive a notification
   // later when the RenderProcessHost was created.
-  base::ProcessHandle handle = render_frame_host->GetProcess()->GetHandle();
+  base::ProcessHandle handle = render_process_host->GetHandle();
   if (handle != base::kNullProcessHandle)
     current_pid_ = base::GetProcId(handle);
 
@@ -479,28 +485,22 @@
                                                  RenderFrameHost* new_host) {
   DCHECK(CalledOnValidThread());
 
+  // Monitor the new renderer process for crashes.
+  RenderProcessHost* render_process_host = new_host->GetProcess();
+  if (!render_process_host_observer_.IsObserving(render_process_host))
+    render_process_host_observer_.Add(render_process_host);
+
   // Ignore host changes for frames other than the main / top-level frame.
   if (new_host->GetParent() != nullptr)
     return;
 
-  base::ProcessHandle process_handle = new_host->GetProcess()->GetHandle();
+  base::ProcessHandle process_handle = render_process_host->GetHandle();
   DCHECK(process_handle != base::kNullProcessHandle);
   current_pid_ = base::GetProcId(process_handle);
 
   SendTestConfiguration();
 }
 
-void BlinkTestController::RenderProcessGone(base::TerminationStatus status) {
-  DCHECK(CalledOnValidThread());
-  if (current_pid_ != base::kNullProcessId) {
-    printer_->AddErrorMessage(std::string("#CRASHED - renderer (pid ") +
-                              base::IntToString(current_pid_) + ")");
-  } else {
-    printer_->AddErrorMessage("#CRASHED - renderer");
-  }
-  DiscardMainWindow();
-}
-
 void BlinkTestController::DevToolsProcessCrashed() {
   DCHECK(CalledOnValidThread());
   printer_->AddErrorMessage("#CRASHED - devtools");
@@ -515,6 +515,36 @@
   DiscardMainWindow();
 }
 
+void BlinkTestController::RenderProcessExited(
+    RenderProcessHost* render_process_host,
+    base::TerminationStatus status,
+    int exit_code) {
+  DCHECK(CalledOnValidThread());
+  switch (status) {
+    case base::TerminationStatus::TERMINATION_STATUS_NORMAL_TERMINATION:
+    case base::TerminationStatus::TERMINATION_STATUS_STILL_RUNNING:
+      break;
+
+    case base::TerminationStatus::TERMINATION_STATUS_ABNORMAL_TERMINATION:
+    case base::TerminationStatus::TERMINATION_STATUS_LAUNCH_FAILED:
+    case base::TerminationStatus::TERMINATION_STATUS_PROCESS_CRASHED:
+    case base::TerminationStatus::TERMINATION_STATUS_PROCESS_WAS_KILLED:
+    default: {
+      base::ProcessHandle handle = render_process_host->GetHandle();
+      if (handle != base::kNullProcessHandle) {
+        printer_->AddErrorMessage(std::string("#CRASHED - renderer (pid ") +
+                                  base::IntToString(base::GetProcId(handle)) +
+                                  ")");
+      } else {
+        printer_->AddErrorMessage("#CRASHED - renderer");
+      }
+
+      DiscardMainWindow();
+      break;
+    }
+  }
+}
+
 void BlinkTestController::Observe(int type,
                                   const NotificationSource& source,
                                   const NotificationDetails& details) {
diff --git a/content/shell/browser/layout_test/blink_test_controller.h b/content/shell/browser/layout_test/blink_test_controller.h
index 72ddca65..515c5a9 100644
--- a/content/shell/browser/layout_test/blink_test_controller.h
+++ b/content/shell/browser/layout_test/blink_test_controller.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/scoped_observer.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/non_thread_safe.h"
 #include "build/build_config.h"
@@ -21,6 +22,7 @@
 #include "content/public/browser/gpu_data_manager_observer.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/render_process_host_observer.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/web_preferences.h"
 #include "content/shell/common/leak_detection_result.h"
@@ -41,6 +43,7 @@
 class LayoutTestBluetoothChooserFactory;
 class LayoutTestDevToolsFrontend;
 class RenderFrameHost;
+class RenderProcessHost;
 class Shell;
 
 #if defined(OS_ANDROID)
@@ -113,6 +116,7 @@
 
 class BlinkTestController : public base::NonThreadSafe,
                             public WebContentsObserver,
+                            public RenderProcessHostObserver,
                             public NotificationObserver,
                             public GpuDataManagerObserver {
  public:
@@ -153,9 +157,13 @@
   void RenderFrameCreated(RenderFrameHost* render_frame_host) override;
   void RenderFrameHostChanged(RenderFrameHost* old_host,
                               RenderFrameHost* new_host) override;
-  void RenderProcessGone(base::TerminationStatus status) override;
   void WebContentsDestroyed() override;
 
+  // RenderProcessHostObserver implementation.
+  void RenderProcessExited(RenderProcessHost* render_process_host,
+                           base::TerminationStatus status,
+                           int exit_code) override;
+
   // NotificationObserver implementation.
   void Observe(int type,
                const NotificationSource& source,
@@ -246,6 +254,10 @@
   // Number of ShellViewHostMsg_LayoutDumpResponse messages we are waiting for.
   int pending_layout_dumps_;
 
+  // Renderer processes are observed to detect crashes.
+  ScopedObserver<RenderProcessHost, RenderProcessHostObserver>
+      render_process_host_observer_;
+
 #if defined(OS_ANDROID)
   // Because of the nested message pump implementation, Android needs to allow
   // waiting on the UI thread while layout tests are being ran.
diff --git a/content/shell/renderer/layout_test/blink_test_runner.cc b/content/shell/renderer/layout_test/blink_test_runner.cc
index 3031074..7175b432 100644
--- a/content/shell/renderer/layout_test/blink_test_runner.cc
+++ b/content/shell/renderer/layout_test/blink_test_runner.cc
@@ -302,11 +302,6 @@
   mock_client->ResetData();
 }
 
-void BlinkTestRunner::DidChangeBatteryStatus(
-    const blink::WebBatteryStatus& status) {
-  MockBatteryStatusChanged(status);
-}
-
 void BlinkTestRunner::PrintMessage(const std::string& message) {
   Send(new ShellViewHostMsg_PrintMessage(routing_id(), message));
 }
diff --git a/content/shell/renderer/layout_test/blink_test_runner.h b/content/shell/renderer/layout_test/blink_test_runner.h
index 0354eb39..2688e6e4 100644
--- a/content/shell/renderer/layout_test/blink_test_runner.h
+++ b/content/shell/renderer/layout_test/blink_test_runner.h
@@ -25,7 +25,6 @@
 class SkCanvas;
 
 namespace blink {
-class WebBatteryStatus;
 class WebDeviceMotionData;
 class WebDeviceOrientationData;
 struct WebRect;
@@ -71,7 +70,6 @@
   void SetScreenOrientation(
       const blink::WebScreenOrientationType& orientation) override;
   void ResetScreenOrientation() override;
-  void DidChangeBatteryStatus(const blink::WebBatteryStatus& status) override;
   void PrintMessage(const std::string& message) override;
   void PostTask(test_runner::WebTask* task) override;
   void PostDelayedTask(test_runner::WebTask* task, long long ms) override;
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py
index 925beaf..0003712 100755
--- a/content/test/gpu/generate_buildbot_json.py
+++ b/content/test/gpu/generate_buildbot_json.py
@@ -55,17 +55,6 @@
       'swarming': True,
       'os_type': 'win',
     },
-    'Win7 Release (Intel)': {
-      'swarming_dimensions': {
-        'gpu': '8086:041a',
-        'os': 'Windows-2008ServerR2-SP1'
-      },
-      'build_config': 'Release',
-      # This bot is a one-off and doesn't have similar slaves in the
-      # swarming pool.
-      'swarming': False,
-      'os_type': 'win',
-    },
     'Mac 10.10 Release (Intel)': {
       'swarming_dimensions': {
         'gpu': '8086:0a2e',
@@ -212,6 +201,17 @@
       'swarming': True,
       'os_type': 'win',
     },
+    'Win7 Release (Intel)': {
+      'swarming_dimensions': {
+        'gpu': '8086:041a',
+        'os': 'Windows-2008ServerR2-SP1'
+      },
+      'build_config': 'Release',
+      # This bot is a one-off and doesn't have similar slaves in the
+      # swarming pool.
+      'swarming': False,
+      'os_type': 'win',
+    },
     'Win7 x64 Release (NVIDIA)': {
       'swarming_dimensions': {
         'gpu': '10de:104a',
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index bc26200..13ae613 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -31,7 +31,6 @@
 #include "content/renderer/renderer_blink_platform_impl.h"
 #include "content/shell/common/shell_switches.h"
 #include "device/bluetooth/bluetooth_adapter.h"
-#include "third_party/WebKit/public/platform/WebBatteryStatus.h"
 #include "third_party/WebKit/public/platform/WebGamepads.h"
 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionData.h"
 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceOrientationData.h"
@@ -49,7 +48,6 @@
 #include "ui/gfx/win/direct_write.h"
 #endif
 
-using blink::WebBatteryStatus;
 using blink::WebDeviceMotionData;
 using blink::WebDeviceOrientationData;
 using blink::WebGamepad;
@@ -167,12 +165,6 @@
   RendererBlinkPlatformImpl::SetMockDeviceOrientationDataForTesting(data);
 }
 
-void MockBatteryStatusChanged(const WebBatteryStatus& status) {
-  RenderThreadImpl::current()
-      ->blink_platform_impl()
-      ->MockBatteryStatusChangedForTesting(status);
-}
-
 void EnableRendererLayoutTestMode() {
   RenderThreadImpl::current()->set_layout_test_mode(true);
 
diff --git a/docs/mac_build_instructions.md b/docs/mac_build_instructions.md
index 6a35330..9695de7 100644
--- a/docs/mac_build_instructions.md
+++ b/docs/mac_build_instructions.md
@@ -5,7 +5,7 @@
 ## Prerequisites
 
 *   A Mac running 10.9+.
-*   http://developer.apple.com/tools/xcode/XCode, 5+
+*   https://developer.apple.com/xcode, 5+
 *   Install
     [gclient](http://dev.chromium.org/developers/how-tos/install-depot-tools),
     part of the
@@ -111,7 +111,7 @@
 
 According to the
 [Chromium style guide](http://dev.chromium.org/developers/coding-style) code is
-[not allowed to have whitespace on the ends of lines](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Horizontal_Whitespace).
+[not allowed to have whitespace on the ends of lines](https://google.github.io/styleguide/cppguide.html#Horizontal_Whitespace).
 If you edit in Xcode, know that it loves adding whitespace to the ends of lines
 which can make editing in Xcode more painful than it should be. The
 [GTM Xcode Plugin](http://code.google.com/p/google-toolbox-for-mac/downloads/list)
diff --git a/gpu/gles2_conform_support/native/egl_native_windowless.cc b/gpu/gles2_conform_support/native/egl_native_windowless.cc
index a864d95..077883e 100644
--- a/gpu/gles2_conform_support/native/egl_native_windowless.cc
+++ b/gpu/gles2_conform_support/native/egl_native_windowless.cc
@@ -32,7 +32,7 @@
 
 EGLImageKHR GTFCreateEGLImage(int width, int height,
                               GLenum format, GLenum type) {
-  return (EGLImageKHR)NULL;
+  return (EGLImageKHR)0;
 }
 
 void GTFDestroyEGLImage(EGLImageKHR image) {
diff --git a/ios/chrome/app/resources/ios_resources.grd b/ios/chrome/app/resources/ios_resources.grd
index b52f9c9a..dc37b5e 100644
--- a/ios/chrome/app/resources/ios_resources.grd
+++ b/ios/chrome/app/resources/ios_resources.grd
@@ -7,12 +7,6 @@
     <output filename="ios_resources.pak" type="data_package" />
   </outputs>
   <release seq="1">
-    <structures fallback_to_low_resolution="true">
-      <!-- KEEP THESE IN ALPHABETICAL ORDER!  DO NOT ADD TO RANDOM PLACES JUST
-           BECAUSE YOUR RESOURCES ARE FUNCTIONALLY RELATED OR FALL UNDER THE
-           SAME CONDITIONALS. -->
-      <structure name="IDR_IOS_INCOGNITO_TAB_HTML" file="ntp/incognito_tab.html" flattenhtml="true" type="chrome_html" />
-    </structures>
     <includes>
       <include name="IDR_IOS_HISTORY_HTML" file="history/history.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_IOS_HISTORY_JS" file="history/history.js" flattenhtml="true" type="BINDATA" />
diff --git a/ios/chrome/app/resources/ntp/images/1x/incognito_icon.png b/ios/chrome/app/resources/ntp/images/1x/incognito_icon.png
deleted file mode 100644
index 9925f9ba..0000000
--- a/ios/chrome/app/resources/ntp/images/1x/incognito_icon.png
+++ /dev/null
Binary files differ
diff --git a/ios/chrome/app/resources/ntp/images/2x/incognito_icon.png b/ios/chrome/app/resources/ntp/images/2x/incognito_icon.png
deleted file mode 100644
index 802b709..0000000
--- a/ios/chrome/app/resources/ntp/images/2x/incognito_icon.png
+++ /dev/null
Binary files differ
diff --git a/ios/chrome/app/resources/ntp/incognito_tab.css b/ios/chrome/app/resources/ntp/incognito_tab.css
deleted file mode 100644
index 74ca6443..0000000
--- a/ios/chrome/app/resources/ntp/incognito_tab.css
+++ /dev/null
@@ -1,69 +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. */
-
-.center {
-  margin-left: auto;
-  margin-right: auto;
-  max-width: 416px;
-  padding-left: 16px;
-  padding-right: 16px;
-}
-
-html {
-  /* It's necessary to add this here in order to prevent the incognito text
-     from being suddenly zoomed in when the phone is in landscape mode
-     (see b/6644342). */
-  -webkit-text-size-adjust: none;
-  /* On iOS, set the background to transparent. */
-  background-color: transparent;
-  color: #fff;
-  margin-left: 8px;
-  margin-right: 8px;
-}
-
-/* On iOS with WKWebView, embed the fonts. */
-$i18n{robotoRegularFontFace}
-$i18n{robotoMediumFontFace}
-$i18n{robotoLightFontFace}
-
-h1 {
-  font-family: Roboto-Light;
-  font-size: 24px;
-  font-weight: normal;
-  margin-top: 22px;
-  opacity: 0.8;
-  text-align: center;
-}
-
-.description {
-  font-family: Roboto-Regular;
-  font-size: 14px;
-  line-height: 20px;
-  margin-top: 32px;
-  opacity: 0.7;
-}
-
-a {
-  color: rgb(3, 169, 244);
-  text-decoration: none;
-}
-
-.icon {
-  content: -webkit-image-set(
-      url(images/1x/incognito_icon.png) 1x,
-      url(images/2x/incognito_icon.png) 2x);
-  height: 120px;
-  margin-left: auto;
-  margin-right: auto;
-  margin-top: 24px;
-  width: 120px;
-}
-
-.link {
-  font-family: Roboto-Medium;
-  font-size: 14px;
-  margin-top: 36px;
-  opacity: 1;
-  text-align: center;
-}
diff --git a/ios/chrome/app/resources/ntp/incognito_tab.html b/ios/chrome/app/resources/ntp/incognito_tab.html
deleted file mode 100644
index 9392089..0000000
--- a/ios/chrome/app/resources/ntp/incognito_tab.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html i18n-values="dir:textdirection;bookmarkbarattached:bookmarkbarattached">
-<head>
-<meta charset="utf-8">
-<title i18n-content="title"></title>
-<!-- The viewport tag forces the page to correctly resize when starting in
-     landscape mode; this handles an iOS resizing bug. -->
-<meta name="viewport"
-   content="width=device-width, initial-scale=1, maximum-scale=1"/>
-<link rel="stylesheet" href="incognito_tab.css">
-</head>
-<body>
-<div class="center">
-  <div class="icon"></div>
-  <div>
-    <h1 i18n-content="incognitoTabHeading"></h1>
-    <p>
-      <div i18n-values=".innerHTML:incognitoTabDescription" class="description">
-      </div>
-      <div i18n-content="incognitoTabWarning" class="description">
-      </div>
-      <div class="link">
-        <a i18n-content="learnMore" i18n-values=".href:learnMoreLink"></a>
-      </div>
-    </p>
-  </div>
-</div>
-</body>
-<script>
-var originalTopMargin = 0;
-function centerContentVerticallyIfNecessary() {
-  var content = document.getElementsByClassName('center')[0];
-  var boxHeight = content.clientHeight;
-  var screenHeight = window.innerHeight;
-  // Adjust the margin around the content so that there's twice as much empty
-  // space below the content as above if all the content fits in inside the
-  // screen.
-  var margin = Math.max((screenHeight - boxHeight) / 3, 10);
-  content.style.marginTop = margin + 'px';
-}
-// Delay until after the i18n sweep is done.
-window.setTimeout(centerContentVerticallyIfNecessary, 0);
-// The image can change the content height, so re-center when it's loaded.
-window.addEventListener('load', centerContentVerticallyIfNecessary);
-window.addEventListener('resize', centerContentVerticallyIfNecessary);
-</script>
-</html>
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index fbc8c23..fdf39c1 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -359,6 +359,7 @@
     "snapshots/lru_cache.mm",
     "snapshots/snapshot_cache.h",
     "snapshots/snapshot_cache.mm",
+    "snapshots/snapshot_cache_internal.h",
     "snapshots/snapshot_manager.h",
     "snapshots/snapshot_manager.mm",
     "snapshots/snapshot_overlay.h",
diff --git a/ios/chrome/browser/experimental_flags.mm b/ios/chrome/browser/experimental_flags.mm
index 52a2801..59dfc9f1 100644
--- a/ios/chrome/browser/experimental_flags.mm
+++ b/ios/chrome/browser/experimental_flags.mm
@@ -96,10 +96,10 @@
     return false;
   }
 
-  // Check if the finch experiment is turned on.
+  // Check if the finch experiment is turned off.
   std::string group_name = base::FieldTrialList::FindFullName("IOSTabSwitcher");
-  return base::StartsWith(group_name, "Enabled",
-                          base::CompareCase::INSENSITIVE_ASCII);
+  return !base::StartsWith(group_name, "Disabled",
+                           base::CompareCase::INSENSITIVE_ASCII);
 }
 
 bool IsReadingListEnabled() {
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
index 0602d85..319d1f89 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
@@ -54,13 +54,15 @@
   scoped_refptr<net::URLRequestContextGetter> request_context =
       browser_state->GetRequestContext();
 
+  ntp_snippets::NTPSnippetsScheduler* scheduler = nullptr;
+
   scoped_refptr<base::SequencedTaskRunner> task_runner =
       web::WebThread::GetBlockingPool()
           ->GetSequencedTaskRunnerWithShutdownBehavior(
               base::SequencedWorkerPool::GetSequenceToken(),
               base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
   return make_scoped_ptr(new ntp_snippets::NTPSnippetsService(
-      task_runner, GetApplicationContext()->GetApplicationLocale(),
+      task_runner, GetApplicationContext()->GetApplicationLocale(), scheduler,
       make_scoped_ptr(new ntp_snippets::NTPSnippetsFetcher(
           task_runner, (SigninManagerBase*)signin_manager, token_service,
           request_context, browser_state->GetStatePath()))));
diff --git a/ios/chrome/browser/passwords/password_controller.mm b/ios/chrome/browser/passwords/password_controller.mm
index 9df5a6ca5..1938757 100644
--- a/ios/chrome/browser/passwords/password_controller.mm
+++ b/ios/chrome/browser/passwords/password_controller.mm
@@ -732,7 +732,8 @@
         IOSChromeProfileSyncServiceFactory::GetForBrowserState(
             self.browserState);
     isSmartLockBrandingEnabled =
-        password_bubble_experiment::IsSmartLockBrandingEnabled(sync_service);
+        password_bubble_experiment::IsSmartLockBrandingSavePromptEnabled(
+            sync_service);
   }
   infobars::InfoBarManager* infoBarManager =
       InfoBarManagerImpl::FromWebState(webStateObserverBridge_->web_state());
diff --git a/ios/chrome/browser/snapshots/OWNERS b/ios/chrome/browser/snapshots/OWNERS
index b58c2fd6..d13827d 100644
--- a/ios/chrome/browser/snapshots/OWNERS
+++ b/ios/chrome/browser/snapshots/OWNERS
@@ -1,2 +1,2 @@
+jif@chromium.org
 justincohen@chromium.org
-msarda@chromium.org
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.mm b/ios/chrome/browser/snapshots/snapshot_cache.mm
index d6537cc..8e85668a 100644
--- a/ios/chrome/browser/snapshots/snapshot_cache.mm
+++ b/ios/chrome/browser/snapshots/snapshot_cache.mm
@@ -18,13 +18,12 @@
 #include "base/task_runner_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "ios/chrome/browser/experimental_flags.h"
+#import "ios/chrome/browser/snapshots/snapshot_cache_internal.h"
 #include "ios/chrome/browser/ui/ui_util.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/web/public/web_thread.h"
 
 @interface SnapshotCache ()
-+ (base::FilePath)imagePathForSessionID:(NSString*)sessionID;
-+ (base::FilePath)greyImagePathForSessionID:(NSString*)sessionID;
 // Returns the directory where the thumbnails are saved.
 + (base::FilePath)cacheDirectory;
 // Returns the directory where the thumbnails were stored in M28 and earlier.
@@ -144,52 +143,45 @@
     DCHECK_CURRENTLY_ON(web::WebThread::UI);
     propertyReleaser_SnapshotCache_.Init(self, [SnapshotCache class]);
 
-    // Always use the LRUCache when the tab switcher is enabled.
-    if (experimental_flags::IsTabSwitcherEnabled() ||
-        experimental_flags::IsLRUSnapshotCacheEnabled()) {
+    if ([self usesLRUCache]) {
       lruCache_.reset(
           [[LRUCache alloc] initWithCacheSize:kLRUCacheMaxCapacity]);
     } else {
       imageDictionary_.reset(
           [[NSMutableDictionary alloc] initWithCapacity:kCacheInitialCapacity]);
     }
-
-    if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled()) {
-      [[NSNotificationCenter defaultCenter]
-          addObserver:self
-             selector:@selector(handleLowMemory)
-                 name:UIApplicationDidReceiveMemoryWarningNotification
-               object:nil];
-      [[NSNotificationCenter defaultCenter]
-          addObserver:self
-             selector:@selector(handleEnterBackground)
-                 name:UIApplicationDidEnterBackgroundNotification
-               object:nil];
-      [[NSNotificationCenter defaultCenter]
-          addObserver:self
-             selector:@selector(handleBecomeActive)
-                 name:UIApplicationDidBecomeActiveNotification
-               object:nil];
-    }
+    [[NSNotificationCenter defaultCenter]
+        addObserver:self
+           selector:@selector(handleLowMemory)
+               name:UIApplicationDidReceiveMemoryWarningNotification
+             object:nil];
+    [[NSNotificationCenter defaultCenter]
+        addObserver:self
+           selector:@selector(handleEnterBackground)
+               name:UIApplicationDidEnterBackgroundNotification
+             object:nil];
+    [[NSNotificationCenter defaultCenter]
+        addObserver:self
+           selector:@selector(handleBecomeActive)
+               name:UIApplicationDidBecomeActiveNotification
+             object:nil];
   }
   return self;
 }
 
 - (void)dealloc {
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled()) {
-    [[NSNotificationCenter defaultCenter]
-        removeObserver:self
-                  name:UIApplicationDidReceiveMemoryWarningNotification
-                object:nil];
-    [[NSNotificationCenter defaultCenter]
-        removeObserver:self
-                  name:UIApplicationDidEnterBackgroundNotification
-                object:nil];
-    [[NSNotificationCenter defaultCenter]
-        removeObserver:self
-                  name:UIApplicationDidBecomeActiveNotification
-                object:nil];
-  }
+  [[NSNotificationCenter defaultCenter]
+      removeObserver:self
+                name:UIApplicationDidReceiveMemoryWarningNotification
+              object:nil];
+  [[NSNotificationCenter defaultCenter]
+      removeObserver:self
+                name:UIApplicationDidEnterBackgroundNotification
+              object:nil];
+  [[NSNotificationCenter defaultCenter]
+      removeObserver:self
+                name:UIApplicationDidBecomeActiveNotification
+              object:nil];
   [super dealloc];
 }
 
@@ -210,9 +202,7 @@
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   DCHECK(sessionID);
 
-  // Cache on iPad is enabled only when the tab switcher is enabled.
-  if ((IsIPadIdiom() && !experimental_flags::IsTabSwitcherEnabled()) &&
-      !callback)
+  if (![self inMemoryCacheIsEnabled] && !callback)
     return;
 
   UIImage* img = nil;
@@ -236,9 +226,7 @@
             [SnapshotCache imagePathForSessionID:sessionID]) retain]);
       }),
       base::BindBlock(^(base::scoped_nsobject<UIImage> image) {
-        // Cache on iPad is enabled only when the tab switcher is enabled.
-        if ((!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled()) &&
-            image) {
+        if ([self inMemoryCacheIsEnabled] && image) {
           if (lruCache_)
             [lruCache_ setObject:image forKey:sessionID];
           else
@@ -254,8 +242,7 @@
   if (!img || !sessionID)
     return;
 
-  // Cache on iPad is enabled only when the tab switcher is enabled.
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled()) {
+  if ([self inMemoryCacheIsEnabled]) {
     if (lruCache_)
       [lruCache_ setObject:img forKey:sessionID];
     else
@@ -386,8 +373,18 @@
   }
 }
 
+- (BOOL)inMemoryCacheIsEnabled {
+  // In-memory cache on iPad is enabled only when the tab switcher is enabled.
+  return !IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled();
+}
+
+- (BOOL)usesLRUCache {
+  // Always use the LRUCache when the tab switcher is enabled.
+  return experimental_flags::IsTabSwitcherEnabled() ||
+         experimental_flags::IsLRUSnapshotCacheEnabled();
+}
+
 - (void)handleLowMemory {
-  DCHECK(!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled());
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   base::scoped_nsobject<NSMutableDictionary> dictionary(
       [[NSMutableDictionary alloc] initWithCapacity:2]);
@@ -411,14 +408,12 @@
 }
 
 - (void)handleEnterBackground {
-  DCHECK(!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled());
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   [imageDictionary_ removeAllObjects];
   [lruCache_ removeAllObjects];
 }
 
 - (void)handleBecomeActive {
-  DCHECK(!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled());
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   for (NSString* sessionID in pinnedIDs_)
     [self retrieveImageForSessionID:sessionID callback:nil];
@@ -569,11 +564,12 @@
 @implementation SnapshotCache (TestingAdditions)
 
 - (BOOL)hasImageInMemory:(NSString*)sessionID {
-  if (experimental_flags::IsLRUSnapshotCacheEnabled())
+  if ([self usesLRUCache])
     return [lruCache_ objectForKey:sessionID] != nil;
   else
     return [imageDictionary_ objectForKey:sessionID] != nil;
 }
+
 - (BOOL)hasGreyImageInMemory:(NSString*)sessionID {
   return [greyImageDictionary_ objectForKey:sessionID] != nil;
 }
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_internal.h b/ios/chrome/browser/snapshots/snapshot_cache_internal.h
new file mode 100644
index 0000000..794d8680
--- /dev/null
+++ b/ios/chrome/browser/snapshots/snapshot_cache_internal.h
@@ -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.
+
+#ifndef IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_INTERNAL_H_
+#define IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_INTERNAL_H_
+
+#import "ios/chrome/browser/snapshots/snapshot_cache_internal.h"
+
+namespace base {
+class FilePath;
+}
+
+@class NSString;
+
+@interface SnapshotCache (Internal)
+// Returns filepath to the color snapshot of |sessionID|.
++ (base::FilePath)imagePathForSessionID:(NSString*)sessionID;
+// Returns filepath to the greyscale snapshot of |sessionID|.
++ (base::FilePath)greyImagePathForSessionID:(NSString*)sessionID;
+// Returns whether the snapshots are cached in a LRU cache.
+- (BOOL)usesLRUCache;
+// Returns whether the in-memory cache (as opposed to the on-disk cache) is
+// enabled.
+- (BOOL)inMemoryCacheIsEnabled;
+@end
+
+#endif  // IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_CACHE_INTERNAL_H_
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm
index ef3145d..46e7860 100644
--- a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm
+++ b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm
@@ -9,15 +9,13 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/format_macros.h"
-#include "base/ios/ios_util.h"
 #include "base/location.h"
 #include "base/mac/bind_objc_block.h"
 #include "base/mac/scoped_nsautorelease_pool.h"
 #include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/time/time.h"
-#include "ios/chrome/browser/experimental_flags.h"
-#include "ios/chrome/browser/ui/ui_util.h"
+#import "ios/chrome/browser/snapshots/snapshot_cache_internal.h"
 #include "ios/web/public/test/test_web_thread_bundle.h"
 #include "ios/web/public/web_thread.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -27,12 +25,6 @@
 static const NSUInteger kSessionCount = 10;
 static const NSUInteger kSnapshotPixelSize = 8;
 
-// Promote some implementation methods to public.
-@interface SnapshotCache (Testing)
-+ (base::FilePath)imagePathForSessionID:(NSString*)sessionID;
-+ (base::FilePath)greyImagePathForSessionID:(NSString*)sessionID;
-- (void)handleLowMemory;
-@end
 
 namespace {
 
@@ -204,6 +196,13 @@
     return reinterpret_cast<const char*>(CFDataGetBytePtr(data));
   }
 
+  void TriggerMemoryWarning() {
+    // _performMemoryWarning is a private API and musn't be compiled into
+    // official builds.
+    [[UIApplication sharedApplication]
+        performSelector:@selector(_performMemoryWarning)];
+  }
+
   web::TestWebThreadBundle thread_bundle_;
   base::scoped_nsobject<SnapshotCache> snapshotCache_;
   base::scoped_nsobject<NSMutableArray> testSessions_;
@@ -214,16 +213,13 @@
 // As the snapshots are kept in memory, the same pointer can be retrieved.
 // This test also checks that images are correctly removed from the disk.
 TEST_F(SnapshotCacheTest, Cache) {
-  // Don't run on tablets because color snapshots are not cached so this test
-  // can't compare the UIImage pointers directly.
-  if (IsIPadIdiom() && !experimental_flags::IsTabSwitcherEnabled()) {
-    return;
-  }
-
   SnapshotCache* cache = GetSnapshotCache();
 
+  if (![cache inMemoryCacheIsEnabled])
+    return;
+
   NSUInteger expectedCacheSize = kSessionCount;
-  if (experimental_flags::IsLRUSnapshotCacheEnabled())
+  if ([cache usesLRUCache])
     expectedCacheSize = MIN(kSessionCount, [cache lruCacheMaxSize]);
 
   // Put all images in the cache.
@@ -347,16 +343,8 @@
 }
 
 // Loads the color images into the cache, and pins two of them.  Ensures that
-// only the two pinned IDs remain in memory after a call to -handleLowMemory.
-TEST_F(SnapshotCacheTest, HandleLowMemory) {
-// TODO(droger): This test fails on iPad iOS8 device: http://crbug.com/455209
-#if !TARGET_IPHONE_SIMULATOR
-  if (IsIPadIdiom() && base::ios::IsRunningOnIOS8OrLater()) {
-    LOG(WARNING) << "Test disabled on iPad iOS8 device.";
-    return;
-  }
-#endif
-
+// only the two pinned IDs remain in memory after a memory warning.
+TEST_F(SnapshotCacheTest, HandleMemoryWarning) {
   LoadAllColorImagesIntoCache(true);
 
   SnapshotCache* cache = GetSnapshotCache();
@@ -368,15 +356,10 @@
   [set addObject:secondPinnedID];
   cache.pinnedIDs = set;
 
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled())
-    [cache handleLowMemory];
+  TriggerMemoryWarning();
 
-  BOOL expectedValue = YES;
-  if (IsIPadIdiom() && !experimental_flags::IsTabSwitcherEnabled())
-    expectedValue = NO;
-
-  EXPECT_EQ(expectedValue, [cache hasImageInMemory:firstPinnedID]);
-  EXPECT_EQ(expectedValue, [cache hasImageInMemory:secondPinnedID]);
+  EXPECT_EQ(YES, [cache hasImageInMemory:firstPinnedID]);
+  EXPECT_EQ(YES, [cache hasImageInMemory:secondPinnedID]);
 
   NSString* notPinnedID = [testSessions_ objectAtIndex:2];
   EXPECT_FALSE([cache hasImageInMemory:notPinnedID]);
@@ -423,8 +406,7 @@
   // Remove color images from in-memory cache.
   SnapshotCache* cache = GetSnapshotCache();
 
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled())
-    [cache handleLowMemory];
+  TriggerMemoryWarning();
 
   // Request the creation of a grey image cache for all images.
   [cache createGreyCache:testSessions_];
@@ -465,8 +447,7 @@
   LoadColorImagesIntoCache(kNumImages, true);
   // Make sure the color images are only on disk, to ensure the background
   // thread is slow enough to queue up the requests.
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled())
-    [cache handleLowMemory];
+  TriggerMemoryWarning();
 
   // Enable the grey image cache.
   [cache createGreyCache:sessionIDs];
@@ -537,8 +518,7 @@
   NSString* const kSession = @"foo";
   [cache setImage:image withSessionID:kSession];
   FlushRunLoops();  // ensure the file is written to disk.
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled())
-    [cache handleLowMemory];
+  TriggerMemoryWarning();
 
   // Retrive the image and have the callback verify the size and scale.
   __block BOOL callbackComplete = NO;
@@ -574,8 +554,7 @@
   NSString* const kSession = @"foo";
   [cache setImage:image withSessionID:kSession];
   FlushRunLoops();  // ensure the file is written to disk.
-  if (!IsIPadIdiom() || experimental_flags::IsTabSwitcherEnabled())
-    [cache handleLowMemory];
+  TriggerMemoryWarning();
 
   // Verify the file was writted with @2x in the file name.
   base::FilePath retinaFile = [SnapshotCache imagePathForSessionID:kSession];
diff --git a/ios/chrome/ios_chrome.gyp b/ios/chrome/ios_chrome.gyp
index 5b09f3a..16157a67 100644
--- a/ios/chrome/ios_chrome.gyp
+++ b/ios/chrome/ios_chrome.gyp
@@ -514,6 +514,7 @@
         'browser/snapshots/lru_cache.mm',
         'browser/snapshots/snapshot_cache.h',
         'browser/snapshots/snapshot_cache.mm',
+        'browser/snapshots/snapshot_cache_internal.h',
         'browser/snapshots/snapshot_manager.h',
         'browser/snapshots/snapshot_manager.mm',
         'browser/snapshots/snapshot_overlay.h',
diff --git a/ios/net/cookies/cookie_store_ios.h b/ios/net/cookies/cookie_store_ios.h
index 0e6a96fe..94bfc7c 100644
--- a/ios/net/cookies/cookie_store_ios.h
+++ b/ios/net/cookies/cookie_store_ios.h
@@ -141,7 +141,6 @@
   void DeleteCanonicalCookieAsync(
       const CanonicalCookie& cookie,
       const DeleteCallback& callback) override;
-  net::CookieMonster* GetCookieMonster() override;
   void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
                                     const base::Time& delete_end,
                                     const DeleteCallback& callback) override;
diff --git a/ios/net/cookies/cookie_store_ios.mm b/ios/net/cookies/cookie_store_ios.mm
index 1d957b21..8be649ae 100644
--- a/ios/net/cookies/cookie_store_ios.mm
+++ b/ios/net/cookies/cookie_store_ios.mm
@@ -649,14 +649,6 @@
   }
 }
 
-// CookieStoreIOS is an implementation of CookieStore which is not a
-// CookieMonster. As CookieStore is the main cookie API, a caller of
-// GetCookieMonster must handle the case where this returns null.
-net::CookieMonster* CookieStoreIOS::GetCookieMonster() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return nullptr;
-}
-
 void CookieStoreIOS::DeleteAllCreatedBetweenAsync(
     const base::Time& delete_begin,
     const base::Time& delete_end,
diff --git a/ios/net/cookies/cookie_store_ios_unittest.mm b/ios/net/cookies/cookie_store_ios_unittest.mm
index 2de2139..4b5beb2 100644
--- a/ios/net/cookies/cookie_store_ios_unittest.mm
+++ b/ios/net/cookies/cookie_store_ios_unittest.mm
@@ -35,7 +35,6 @@
     return store;
   }
 
-  static const bool is_cookie_monster = false;
   static const bool supports_http_only = false;
   static const bool supports_non_dotted_domains = false;
   static const bool preserves_trailing_dots = false;
@@ -142,8 +141,6 @@
     store_->DeleteCanonicalCookieAsync(cookie, callback);
   }
 
-  net::CookieMonster* GetCookieMonster() override { return nullptr; }
-
   void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
                                     const base::Time& delete_end,
                                     const DeleteCallback& callback) override {
diff --git a/ios/web/test/web_test.h b/ios/web/test/web_test.h
index 46bdbca..d7a369b 100644
--- a/ios/web/test/web_test.h
+++ b/ios/web/test/web_test.h
@@ -7,6 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
+#import "base/ios/block_types.h"
 #import "base/mac/scoped_nsobject.h"
 #include "base/message_loop/message_loop.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
@@ -14,22 +15,9 @@
 #import "ios/web/public/test/test_web_client.h"
 #include "ios/web/public/test/test_web_thread_bundle.h"
 #include "ios/web/public/web_client.h"
-#import "ios/web/web_state/ui/crw_ui_web_view_web_controller.h"
+#import "ios/web/web_state/ui/crw_web_controller.h"
 #include "testing/platform_test.h"
 
-// A subclass of WebController overridden for testing purposes.  Specifically it
-// overrides the UIWebView delegate method to intercept requests coming from
-// core.js.
-// TODO(jimblackler): remove use of TestWebController entirely.
-@interface TestWebController : CRWUIWebViewWebController
-
-@property(nonatomic, assign) BOOL interceptRequest;
-@property(nonatomic, assign) BOOL requestIntercepted;
-@property(nonatomic, assign) BOOL
-    invokeShouldStartLoadWithRequestNavigationTypeDone;
-
-@end
-
 namespace web {
 
 // A test fixture for web tests that need a minimum environment set up that
@@ -87,10 +75,6 @@
   // Blocks until known NSRunLoop-based have completed, known message-loop-based
   // background tasks have completed and |condition| evaluates to true.
   void WaitForCondition(ConditionBlock condition);
-  // Returns true if WebController message queue is empty.
-  // |WaitForBackgroundTasks| does not return until until the message queue is
-  // empty.
-  bool MessageQueueIsEmpty() const;
   // Evaluates JavaScript and returns result as a string.
   NSString* EvaluateJavaScriptAsString(NSString* script) const;
   // Runs the given JavaScript and returns the result as a string. This method
@@ -98,8 +82,8 @@
   // the additional functionality that any JavaScript exceptions are caught and
   // logged (not dropped silently).
   NSString* RunJavaScript(NSString* script);
-  // Returns a CRWWebController to be used in tests.
-  virtual CRWWebController* CreateWebController() = 0;
+  // Creates a CRWWebController to be used in tests.
+  virtual CRWWebController* CreateWebController();
   // TaskObserver methods (used when waiting for background tasks).
   void WillProcessTask(const base::PendingTask& pending_task) override;
   void DidProcessTask(const base::PendingTask& pending_task) override;
@@ -122,28 +106,10 @@
 
 #pragma mark -
 
-// A test fixtures thats creates a CRWUIWebViewWebController for testing.
-class WebTestWithUIWebViewWebController : public WebTestWithWebController {
- protected:
-  // WebTestWithWebController methods.
-  CRWWebController* CreateWebController() override;
-
-  // Invokes JS->ObjC messages directly on the web controller, registering a
-  // human interaction if userIsInteraction==YES. |commands| should be a
-  // stringified message queue.
-  void LoadCommands(NSString* commands,
-                    const GURL& origin_url,
-                    BOOL user_is_interacting);
-};
-
-#pragma mark -
-
 // A test fixtures thats creates a CRWWKWebViewWebController for testing.
-class WebTestWithWKWebViewWebController : public WebTestWithWebController {
- protected:
-  // WebTestWithWebController methods.
-  CRWWebController* CreateWebController() override;
-};
+// TODO(crbug.com/589563): Remove this typedef, clients should use
+// |WebTestWithWebController|.
+typedef WebTestWithWebController WebTestWithWKWebViewWebController;
 
 }  // namespace web
 
diff --git a/ios/web/test/web_test.mm b/ios/web/test/web_test.mm
index f6c781c..5d2bee2 100644
--- a/ios/web/test/web_test.mm
+++ b/ios/web/test/web_test.mm
@@ -15,7 +15,6 @@
 #include "ios/web/public/active_state_manager.h"
 #include "ios/web/public/referrer.h"
 #import "ios/web/public/web_state/ui/crw_web_delegate.h"
-#import "ios/web/web_state/js/crw_js_invoke_parameter_queue.h"
 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h"
 #import "ios/web/web_state/web_state_impl.h"
 #include "third_party/ocmock/OCMock/OCMock.h"
@@ -148,7 +147,7 @@
     if (processed_a_task_)  // Set in TaskObserver method.
       activitySeen = true;
 
-  } while (activitySeen || !MessageQueueIsEmpty());
+  } while (activitySeen);
   messageLoop->RemoveTaskObserver(this);
 }
 
@@ -159,15 +158,6 @@
                                       base::TimeDelta::FromSeconds(10));
 }
 
-bool WebTestWithWebController::MessageQueueIsEmpty() const {
-  // Using this check rather than polymorphism because polymorphising
-  // Chrome*WebViewWebTest would be overengineering. Chrome*WebViewWebTest
-  // inherits from WebTestWithWebController.
-  return [webController_ webViewType] == web::WK_WEB_VIEW_TYPE ||
-      [static_cast<CRWUIWebViewWebController*>(webController_)
-          jsInvokeParameterQueue].isEmpty;
-}
-
 NSString* WebTestWithWebController::EvaluateJavaScriptAsString(
     NSString* script) const {
   __block base::scoped_nsobject<NSString> evaluationResult;
@@ -233,6 +223,12 @@
   return [dictionary objectForKey:@"result"];
 }
 
+CRWWebController* WebTestWithWebController::CreateWebController() {
+  scoped_ptr<WebStateImpl> web_state_impl(new WebStateImpl(GetBrowserState()));
+  return [[CRWWKWebViewWebController alloc]
+      initWithWebState:std::move(web_state_impl)];
+}
+
 void WebTestWithWebController::WillProcessTask(
     const base::PendingTask& pending_task) {
   // Nothing to do.
@@ -261,63 +257,4 @@
                                     s_html_load_count++];
 }
 
-#pragma mark -
-
-CRWWebController* WebTestWithUIWebViewWebController::CreateWebController() {
-  scoped_ptr<WebStateImpl> web_state_impl(new WebStateImpl(GetBrowserState()));
-  return [[TestWebController alloc] initWithWebState:std::move(web_state_impl)];
-}
-
-void WebTestWithUIWebViewWebController::LoadCommands(NSString* commands,
-                                                     const GURL& origin_url,
-                                                     BOOL user_is_interacting) {
-  [static_cast<CRWUIWebViewWebController*>(webController_)
-      respondToMessageQueue:commands
-          userIsInteracting:user_is_interacting
-                  originURL:origin_url];
-}
-
-#pragma mark -
-
-CRWWebController* WebTestWithWKWebViewWebController::CreateWebController() {
-  scoped_ptr<WebStateImpl> web_state_impl(new WebStateImpl(GetBrowserState()));
-  return [[CRWWKWebViewWebController alloc]
-      initWithWebState:std::move(web_state_impl)];
-}
-
 }  // namespace web
-
-#pragma mark -
-
-// Declare CRWUIWebViewWebController's (private) implementation of
-// UIWebViewDelegate.
-@interface CRWUIWebViewWebController(TestProtocolDeclaration)<UIWebViewDelegate>
-@end
-
-@implementation TestWebController {
-  BOOL _interceptRequest;
-  BOOL _requestIntercepted;
-  BOOL _invokeShouldStartLoadWithRequestNavigationTypeDone;
-}
-
-@synthesize interceptRequest = _interceptRequest;
-@synthesize requestIntercepted = _requestIntercepted;
-@synthesize invokeShouldStartLoadWithRequestNavigationTypeDone =
-    _invokeShouldStartLoadWithRequestNavigationTypeDone;
-
-- (BOOL)webView:(UIWebView*)webView
-    shouldStartLoadWithRequest:(NSURLRequest*)request
-                navigationType:(UIWebViewNavigationType)navigationType {
-  _invokeShouldStartLoadWithRequestNavigationTypeDone = false;
-  // Conditionally block the request to open a webpage.
-  if (_interceptRequest) {
-    _requestIntercepted = true;
-    return false;
-  }
-  BOOL result = [super webView:webView
-      shouldStartLoadWithRequest:request
-                  navigationType:navigationType];
-  _invokeShouldStartLoadWithRequestNavigationTypeDone = true;
-  return result;
-}
-@end
diff --git a/ipc/ipc_message_start.h b/ipc/ipc_message_start.h
index 88b0204..6ceb4dc 100644
--- a/ipc/ipc_message_start.h
+++ b/ipc/ipc_message_start.h
@@ -23,6 +23,7 @@
   UtilityMsgStart,
   GpuChannelMsgStart,
   GpuMsgStart,
+  MediaMsgStart,
   ServiceMsgStart,
   PpapiMsgStart,
   FirefoxImporterUnittestMsgStart,
diff --git a/media/blink/BUILD.gn b/media/blink/BUILD.gn
index d613de1..34b36c4f 100644
--- a/media/blink/BUILD.gn
+++ b/media/blink/BUILD.gn
@@ -116,7 +116,7 @@
     "//net",
     "//testing/gmock",
     "//testing/gtest",
-    "//third_party/WebKit/public:blink",
+    "//third_party/WebKit/public:blink_for_unittests",
     "//ui/gfx:test_support",
     "//ui/gfx/geometry",
     "//url",
diff --git a/media/blink/run_all_unittests.cc b/media/blink/run_all_unittests.cc
index bcbc4e3..8eaac37c 100644
--- a/media/blink/run_all_unittests.cc
+++ b/media/blink/run_all_unittests.cc
@@ -71,6 +71,9 @@
   ~TestBlinkPlatformSupport() override;
 
   blink::WebThread* currentThread() override { return &m_currentThread; }
+  void registerMemoryDumpProvider(blink::WebMemoryDumpProvider*,
+                                  const char* name) override {}
+  void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider*) override {}
 
  private:
   CurrentThreadMock m_currentThread;
diff --git a/mojo/shell/background/background_shell.cc b/mojo/shell/background/background_shell.cc
index 3ba1203..7afef7a 100644
--- a/mojo/shell/background/background_shell.cc
+++ b/mojo/shell/background/background_shell.cc
@@ -125,9 +125,11 @@
     context_ = context.get();
     scoped_ptr<mojo::shell::Context::InitParams> context_init_params(
         new mojo::shell::Context::InitParams);
-    context_init_params->app_catalog = std::move(init_params_->app_catalog);
-    context_init_params->native_runner_delegate =
-        init_params_->native_runner_delegate;
+    if (init_params_) {
+      context_init_params->app_catalog = std::move(init_params_->app_catalog);
+      context_init_params->native_runner_delegate =
+          init_params_->native_runner_delegate;
+    }
     context_->Init(std::move(context_init_params));
 
     message_loop_->Run();
diff --git a/mojo/shell/background/tests/background_shell_unittest.cc b/mojo/shell/background/tests/background_shell_unittest.cc
index 04ec802..19280ef9 100644
--- a/mojo/shell/background/tests/background_shell_unittest.cc
+++ b/mojo/shell/background/tests/background_shell_unittest.cc
@@ -38,7 +38,9 @@
 // Uses BackgroundShell to start the shell in the background and connects to
 // background_shell_test_app, verifying we can send a message to the app.
 // An ApplicationCatalogStore is supplied to avoid using a manifest.
-TEST(BackgroundShellTest, Basic) {
+// TODO(crbug.com/589784): This test is disabled, as it fails
+// on the Android GN bot.
+TEST(BackgroundShellTest, DISABLED_Basic) {
   base::MessageLoop message_loop;
   BackgroundShell background_shell;
   scoped_ptr<BackgroundShell::InitParams> init_params(
diff --git a/net/cert/signed_tree_head.cc b/net/cert/signed_tree_head.cc
new file mode 100644
index 0000000..ef1ab70
--- /dev/null
+++ b/net/cert/signed_tree_head.cc
@@ -0,0 +1,46 @@
+// 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 "net/cert/signed_tree_head.h"
+
+#include <string.h>
+
+#include "base/strings/string_number_conversions.h"
+
+namespace net {
+namespace ct {
+
+SignedTreeHead::SignedTreeHead() {}
+
+SignedTreeHead::SignedTreeHead(Version version,
+                               const base::Time& timestamp,
+                               uint64_t tree_size,
+                               const char sha256_root_hash[kSthRootHashLength],
+                               const DigitallySigned& signature,
+                               const std::string& log_id)
+    : version(version),
+      timestamp(timestamp),
+      tree_size(tree_size),
+      signature(signature),
+      log_id(log_id) {
+  memcpy(this->sha256_root_hash, sha256_root_hash, kSthRootHashLength);
+}
+
+SignedTreeHead::~SignedTreeHead() {}
+
+std::ostream& operator<<(std::ostream& stream, const SignedTreeHead& sth) {
+  return stream << "{\n"
+                << "\t\"version\": " << sth.version << ",\n"
+                << "\t\"timestamp\": " << sth.timestamp << ",\n"
+                << "\t\"tree_size\": " << sth.tree_size << ",\n"
+                << "\t\"sha256_root_hash\": \""
+                << base::HexEncode(sth.sha256_root_hash, kSthRootHashLength)
+                << "\",\n\t\"log_id\": \""
+                << base::HexEncode(sth.log_id.data(), sth.log_id.size())
+                << "\"\n"
+                << "}";
+}
+
+}  // namespace ct
+}  // namespace net
diff --git a/net/cert/signed_tree_head.h b/net/cert/signed_tree_head.h
index 1613736..6ff93b0 100644
--- a/net/cert/signed_tree_head.h
+++ b/net/cert/signed_tree_head.h
@@ -7,6 +7,7 @@
 
 #include <stdint.h>
 
+#include <iosfwd>
 #include <string>
 #include <vector>
 
@@ -28,13 +29,29 @@
   // RFC6962-bis to use separate versions, so using a separate scheme here.
   enum Version { V1 = 0, };
 
+  SignedTreeHead();
+  SignedTreeHead(Version version,
+                 const base::Time& timestamp,
+                 uint64_t tree_size,
+                 const char sha256_root_hash[kSthRootHashLength],
+                 const DigitallySigned& signature,
+                 const std::string& log_id);
+  ~SignedTreeHead();
+
   Version version;
   base::Time timestamp;
   uint64_t tree_size;
   char sha256_root_hash[kSthRootHashLength];
   DigitallySigned signature;
+
+  // Added in RFC6962-bis, Appendix A. Needed to identify which log
+  // this STH belongs to.
+  std::string log_id;
 };
 
+NET_EXPORT std::ostream& operator<<(std::ostream& stream,
+                                    const SignedTreeHead& sth);
+
 }  // namespace ct
 
 }  // namespace net
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index 30cf5ff..c5be7c4 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -992,10 +992,6 @@
   DoCookieTask(task);
 }
 
-CookieMonster* CookieMonster::GetCookieMonster() {
-  return this;
-}
-
 void CookieMonster::SetCookieableSchemes(
     const std::vector<std::string>& schemes) {
   base::AutoLock autolock(lock_);
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h
index 14633c7..f6048a7 100644
--- a/net/cookies/cookie_monster.h
+++ b/net/cookies/cookie_monster.h
@@ -196,8 +196,6 @@
   void FlushStore(const base::Closure& callback) override;
   void SetForceKeepSessionState() override;
 
-  CookieMonster* GetCookieMonster() override;
-
   // Resets the list of cookieable schemes to the supplied schemes. Does
   // nothing if called after first use of the instance (i.e. after the
   // instance initialization process).
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index 7871c91..8e84af4 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -75,7 +75,6 @@
     return new CookieMonster(NULL, NULL);
   }
 
-  static const bool is_cookie_monster = true;
   static const bool supports_http_only = true;
   static const bool supports_non_dotted_domains = true;
   static const bool preserves_trailing_dots = true;
@@ -90,7 +89,6 @@
     return new CookieMonster(NULL, NULL);
   }
 
-  static const bool is_cookie_monster = true;
   static const bool supports_http_only = true;
   static const bool supports_non_dotted_domains = true;
   static const bool preserves_trailing_dots = true;
diff --git a/net/cookies/cookie_store.h b/net/cookies/cookie_store.h
index c007001..5beb4ba 100644
--- a/net/cookies/cookie_store.h
+++ b/net/cookies/cookie_store.h
@@ -185,9 +185,6 @@
   // Otherwise, does nothing.
   virtual void SetForceKeepSessionState();
 
-  // Returns the underlying CookieMonster.
-  virtual CookieMonster* GetCookieMonster() = 0;
-
   // Add a callback to be notified when the set of cookies named |name| that
   // would be sent for a request to |url| changes. The returned handle is
   // guaranteed not to hold a hard reference to the CookieStore object.
diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc
index b4876ff..d055c37 100644
--- a/net/cookies/cookie_store_test_helpers.cc
+++ b/net/cookies/cookie_store_test_helpers.cc
@@ -206,10 +206,6 @@
   ADD_FAILURE();
 }
 
-CookieMonster* DelayedCookieMonster::GetCookieMonster() {
-  return cookie_monster_.get();
-}
-
 scoped_ptr<CookieStore::CookieChangedSubscription>
 DelayedCookieMonster::AddCallbackForCookie(
     const GURL& url,
diff --git a/net/cookies/cookie_store_test_helpers.h b/net/cookies/cookie_store_test_helpers.h
index f43dec1..ad02ab6 100644
--- a/net/cookies/cookie_store_test_helpers.h
+++ b/net/cookies/cookie_store_test_helpers.h
@@ -87,8 +87,6 @@
 
   void FlushStore(const base::Closure& callback) override;
 
-  CookieMonster* GetCookieMonster() override;
-
   scoped_ptr<CookieStore::CookieChangedSubscription>
   AddCallbackForCookie(const GURL& url, const std::string& name,
                        const CookieChangedCallback& callback) override;
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h
index 0dfa2cb..9a0fc0c 100644
--- a/net/cookies/cookie_store_unittest.h
+++ b/net/cookies/cookie_store_unittest.h
@@ -44,10 +44,6 @@
 //   // Factory function. Will be called at most once per test.
 //   static scoped_refptr<CookieStore> Create();
 //
-//   // The cookie store is a CookieMonster. Only used to test
-//   // GetCookieMonster().
-//   static const bool is_cookie_monster;
-//
 //   // The cookie store supports cookies with the exclude_httponly() option.
 //   static const bool supports_http_only;
 //
@@ -468,13 +464,6 @@
   EXPECT_TRUE(++it == cookies.end());
 }
 
-TYPED_TEST_P(CookieStoreTest, TypeTest) {
-  scoped_refptr<CookieStore> cs(this->GetCookieStore());
-  EXPECT_EQ(cs->GetCookieMonster(),
-            (TypeParam::is_cookie_monster) ?
-                static_cast<CookieMonster*>(cs.get()) : NULL);
-}
-
 TYPED_TEST_P(CookieStoreTest, DomainTest) {
   scoped_refptr<CookieStore> cs(this->GetCookieStore());
   EXPECT_TRUE(this->SetCookie(cs.get(), this->http_www_google_.url(), "A=B"));
@@ -1373,7 +1362,6 @@
 
 REGISTER_TYPED_TEST_CASE_P(CookieStoreTest,
                            SetCookieWithDetailsAsync,
-                           TypeTest,
                            DomainTest,
                            DomainWithTrailingDotTest,
                            ValidSubdomainTest,
diff --git a/net/disk_cache/backend_unittest.cc b/net/disk_cache/backend_unittest.cc
index ebd2f57..7f2259d 100644
--- a/net/disk_cache/backend_unittest.cc
+++ b/net/disk_cache/backend_unittest.cc
@@ -2947,6 +2947,44 @@
 // TODO(gavinp): Enable BackendEviction test for simple cache after performance
 // problems are addressed. See crbug.com/588184 for more information.
 
+// This overly specific looking test is a regression test aimed at
+// crbug.com/589186.
+TEST_F(DiskCacheBackendTest, MemoryOnlyUseAfterFree) {
+  SetMemoryOnlyMode();
+
+  const int kMaxSize = 200 * 1024;
+  const int kMaxEntryCount = 20;
+  const int kWriteSize = kMaxSize / kMaxEntryCount;
+
+  SetMaxSize(kMaxSize);
+  InitCache();
+
+  scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize));
+  CacheTestFillBuffer(buffer->data(), kWriteSize, false);
+
+  // Create an entry to be our sparse entry that gets written later.
+  disk_cache::Entry* entry;
+  ASSERT_EQ(net::OK, CreateEntry("first parent", &entry));
+  disk_cache::ScopedEntryPtr first_parent(entry);
+
+  // Create a ton of entries, and keep them open, to put the cache well above
+  // its eviction threshhold.
+  const int kTooManyEntriesCount = kMaxEntryCount * 2;
+  std::list<disk_cache::ScopedEntryPtr> open_entries;
+  std::string key_prefix("prefix");
+  for (int i = 0; i < kTooManyEntriesCount; ++i) {
+    ASSERT_EQ(net::OK, CreateEntry(key_prefix + base::IntToString(i), &entry));
+    EXPECT_EQ(kWriteSize,
+              WriteData(entry, 1, 0, buffer.get(), kWriteSize, false));
+    open_entries.push_back(disk_cache::ScopedEntryPtr(entry));
+  }
+  EXPECT_LT(kMaxSize, CalculateSizeOfAllEntries());
+
+  // Writing this sparse data should not crash.
+  EXPECT_EQ(1024, first_parent->WriteSparseData(32768, buffer.get(), 1024,
+                                                net::CompletionCallback()));
+}
+
 TEST_F(DiskCacheTest, Backend_UsageStatsTimer) {
   MessageLoopHelper helper;
 
diff --git a/net/disk_cache/memory/mem_entry_impl.cc b/net/disk_cache/memory/mem_entry_impl.cc
index c28a7fab..bcbebb3c 100644
--- a/net/disk_cache/memory/mem_entry_impl.cc
+++ b/net/disk_cache/memory/mem_entry_impl.cc
@@ -103,16 +103,10 @@
 }
 
 bool MemEntryImpl::InUse() const {
-  if (type() == PARENT_ENTRY) {
-    return ref_count_ > 0;
-  } else {
-    // TODO(gavinp): Can't this just be a DCHECK? How would ref_count_ not be
-    // zero?
+  if (type() == CHILD_ENTRY)
+    return parent_->InUse();
 
-    // A child entry is never in use. Thus one can always be evicted, even while
-    // its parent entry is open and in use.
-    return false;
-  }
+  return ref_count_ > 0;
 }
 
 int MemEntryImpl::GetStorageSize() const {
diff --git a/net/net.gypi b/net/net.gypi
index 450e9b7..49d6496f1 100644
--- a/net/net.gypi
+++ b/net/net.gypi
@@ -115,6 +115,7 @@
       'cert/pem_tokenizer.h',
       'cert/signed_certificate_timestamp.cc',
       'cert/signed_certificate_timestamp.h',
+      'cert/signed_tree_head.cc',
       'cert/signed_tree_head.h',
       'cert/x509_cert_types.cc',
       'cert/x509_cert_types.h',
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index 10e2356..4a7ebb4 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -6575,6 +6575,476 @@
       }
     ]
   },
+  "Win7 Release (Intel)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "angle_end2end_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "angle_unittests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "audio_unittests"
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "name": "tab_capture_end2end_tests",
+        "test": "browser_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "content_gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "gl_unittests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=d3d9"
+        ],
+        "name": "gles2_conform_d3d9_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=gl",
+          "--disable-gpu-sandbox"
+        ],
+        "name": "gles2_conform_gl_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      }
+    ],
+    "isolated_scripts": [
+      {
+        "args": [
+          "context_lost",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "context_lost_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "gpu_process_launch_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "gpu_rasterization",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "gpu_rasterization_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "hardware_accelerated_feature_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "maps_pixel_test",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "memory_test",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "memory_test",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--refimg-cloud-storage-bucket",
+          "chromium-gpu-archive/reference-images",
+          "--os-type",
+          "win",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "pixel_test",
+        "non_precommit_args": [
+          "--upload-refimg-to-cloud-storage"
+        ],
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "precommit_args": [
+          "--download-refimg-from-cloud-storage"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "screenshot_sync_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "trace_test",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--webgl-conformance-version=2.0.0",
+          "--webgl2-only=true"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "webgl2_conformance_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "webgl_conformance_d3d9_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=gl"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "webgl_conformance_gl_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_test",
+        "name": "webgl_conformance_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_test_run"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:041a",
+              "os": "Windows-2008ServerR2-SP1"
+            }
+          ]
+        }
+      }
+    ]
+  },
   "Win7 Release (NVIDIA)": {
     "gtest_tests": [
       {
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json
index 5f1b518..39c2ce8 100644
--- a/testing/buildbot/chromium.gpu.json
+++ b/testing/buildbot/chromium.gpu.json
@@ -3240,325 +3240,6 @@
       }
     ]
   },
-  "Win7 Release (Intel)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "angle_unittests"
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "name": "tab_capture_end2end_tests",
-        "test": "browser_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "content_gl_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        },
-        "test": "gl_unittests"
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "context_lost_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "gpu_process_launch_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "gpu_rasterization",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "gpu_rasterization_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "hardware_accelerated_feature_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "maps_pixel_test",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "memory_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "memory_test",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--refimg-cloud-storage-bucket",
-          "chromium-gpu-archive/reference-images",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "pixel_test",
-        "non_precommit_args": [
-          "--upload-refimg-to-cloud-storage"
-        ],
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "precommit_args": [
-          "--download-refimg-from-cloud-storage"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "screenshot_sync_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "trace_test",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_test",
-        "name": "webgl_conformance_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_test_run"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "os": "Windows-2008ServerR2-SP1"
-            }
-          ]
-        }
-      }
-    ]
-  },
   "Win7 Release (NVIDIA)": {
     "gtest_tests": [
       {
diff --git a/testing/buildbot/filters/browser-side-navigation.linux.browser_tests.filter b/testing/buildbot/filters/browser-side-navigation.linux.browser_tests.filter
index 351b9f94..905b3b8 100644
--- a/testing/buildbot/filters/browser-side-navigation.linux.browser_tests.filter
+++ b/testing/buildbot/filters/browser-side-navigation.linux.browser_tests.filter
@@ -13,6 +13,7 @@
 -AutofillTest.UsePlusSignForInternationalNumber
 -BrowserActionApiTest.BrowserActionPopupWithIframe
 -BrowserNavigatorTest.NavigateFromNTPToOptionsInSameTab
+-BrowserTest.CancelBeforeUnloadResetsURL
 -BrowserTest.BeforeUnloadVsBeforeReload
 -BrowserTest.ClearPendingOnFailUnlessNTP
 -BrowserTest.InterstitialCancelsGuestViewDialogs
@@ -34,8 +35,28 @@
 -ChromeSecurityStateModelClientTest.MixedContentStrictBlocking
 -ChromeSecurityStateModelClientTest.MixedContentWithBrokenSHA1
 -ChromeSecurityStateModelClientTest.SHA1Broken
+-ChromeServiceWorkerFetchPPAPIPrivateTest.OtherOrigin
+-ChromeServiceWorkerFetchPPAPIPrivateTest.OtherOriginCORS
+-ChromeServiceWorkerFetchPPAPIPrivateTest.OtherOriginCORSCredentials
+-ChromeServiceWorkerFetchPPAPIPrivateTest.OtherOriginCredentials
+-ChromeServiceWorkerFetchPPAPIPrivateTest.SameOrigin
+-ChromeServiceWorkerFetchPPAPIPrivateTest.SameOriginCORS
+-ChromeServiceWorkerFetchPPAPIPrivateTest.SameOriginCORSCredentials
+-ChromeServiceWorkerFetchPPAPIPrivateTest.SameOriginCredentials
+-ChromeServiceWorkerFetchPPAPITest.OtherOrigin
+-ChromeServiceWorkerFetchPPAPITest.OtherOriginCORS
+-ChromeServiceWorkerFetchPPAPITest.OtherOriginCORSCredentials
+-ChromeServiceWorkerFetchPPAPITest.OtherOriginCredentials
+-ChromeServiceWorkerFetchPPAPITest.SameOrigin
+-ChromeServiceWorkerFetchPPAPITest.SameOriginCORS
+-ChromeServiceWorkerFetchPPAPITest.SameOriginCORSCredentials
+-ChromeServiceWorkerFetchPPAPITest.SameOriginCredentials
+-ClickModifierTest.WindowOpenBasicClickTest
+-ClickModifierTest.WindowOpenControlShiftClickTest
+-ClickModifierTest.WindowOpenShiftMiddleClickTest
 -CommonNameMismatchBrowserTest.CheckWWWSubdomainMismatchInverse
 -CommonNameMismatchBrowserTest.ShouldShowWWWSubdomainMismatchInterstitial
+-ContentSettingsExceptionsAreaBrowserTest.OpenIncognitoWindow
 -ContentSettingsTest.RedirectCrossOrigin
 -ContentSettingsTest.RedirectLoopCookies
 -ContinueWhereILeftOffTest.Post
@@ -79,6 +100,9 @@
 -ExtensionApiTest.ContentScriptAboutBlankAndSrcdoc
 -ExtensionApiTest.CookiesEventsSpanning
 -ExtensionApiTest.Events
+-ExtensionApiTest.Incognito
+-ExtensionApiTest.JavasScriptEncodedURL
+-ExtensionApiTest.TabMove
 -ExtensionApiTest.Tabs2
 -ExtensionApiTest.TabsOnUpdated
 -ExtensionBrowserTest.WindowOpenExtension
@@ -88,6 +112,8 @@
 -ExtensionResourceRequestPolicyTest.WebAccessibleResources
 -ExtensionTabsTest.DefaultToIncognitoWhenItIsForcedAndNoArgs
 -ExtensionURLRewriteBrowserTest.NewTabPageURL
+-ExtensionWebRequestApiTest.PostData1
+-ExtensionWebRequestApiTest.PostData2
 -ExtensionWebRequestApiTest.WebRequestBlocking
 -ExtensionWebRequestApiTest.WebRequestComplex
 -ExtensionWebRequestApiTest.WebRequestDeclarative1
@@ -278,6 +304,7 @@
 -SafeBrowsingServiceTest.MainFrameHitWithReferrer
 -SafeBrowsingServiceTest.MalwareWithWhitelist
 -SafeBrowsingServiceTest.Prefetch
+-SavePageBrowserTest.SaveDownloadableIFrame
 -SaveType/SavePageMultiFrameBrowserTest.AboutBlank/0
 -SaveType/SavePageMultiFrameBrowserTest.AboutBlank/1
 -SaveType/SavePageMultiFrameBrowserTest.CrossSite/1
@@ -288,6 +315,7 @@
 -SaveType/SavePageMultiFrameBrowserTest.Style/1
 -ScriptContextTest.GetEffectiveDocumentURL
 -SecurityStateModelLoadingTest.NavigationStateChanges
+-SessionRestoreTest.RestoreWebUISettings
 -SSLUITest.BadCertFollowedByGoodCert
 -SSLUITest.TestBadFrameNavigation
 -SSLUITest.TestBadHTTPSDownload
diff --git a/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter b/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
index 9ab32c4..81533d5 100644
--- a/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
+++ b/testing/buildbot/filters/browser-side-navigation.linux.content_browsertests.filter
@@ -1,5 +1,3 @@
--AsyncRevalidationManagerBrowserTest.CacheIsUpdated
--AsyncRevalidationManagerBrowserTest.StaleWhileRevalidateIsApplied
 -CrossSiteRedirectorBrowserTest.VerifyCrossSiteRedirectURL
 -CrossSiteTransferTest.NoLeakOnCrossSiteCancel
 -DevToolsProtocolTest.CrossSitePauseInBeforeUnload
@@ -16,6 +14,7 @@
 -SessionHistoryTest.FrameFormBackForward
 -SitePerProcessBrowserTest.NavigateRemoteAfterError
 -SitePerProcessBrowserTest.NewRenderFrameProxyPreservesOpener
+-SitePerProcessBrowserTest.OpenerSetLocation
 -SitePerProcessBrowserTest.OpenPopupWithRemoteParent
 -SitePerProcessBrowserTest.RenderViewHostPendingDeletionIsNotReused
 -SitePerProcessBrowserTest.SubframePendingAndBackToSameSiteInstance
diff --git a/testing/buildbot/filters/browser-side-navigation.linux.content_unittests.filter b/testing/buildbot/filters/browser-side-navigation.linux.content_unittests.filter
index 55a7b9d..a8d2aab 100644
--- a/testing/buildbot/filters/browser-side-navigation.linux.content_unittests.filter
+++ b/testing/buildbot/filters/browser-side-navigation.linux.content_unittests.filter
@@ -1,17 +1,25 @@
+-NavigationControllerTest.IsInPageNavigation
+-NavigationControllerTest.IsInPageNavigationWithUniversalFileAccess
 -NavigationControllerTest.LoadURL_RedirectAbortDoesntShowPendingURL
 -RenderFrameHostManagerTest.RestoreNavigationToWebUI
 -RenderFrameHostManagerTest.SimultaneousNavigationWithOneWebUI1
 -RenderFrameHostManagerTest.SimultaneousNavigationWithOneWebUI2
 -RenderFrameHostManagerTest.SimultaneousNavigationWithTwoWebUIs1
 -RenderFrameHostManagerTest.SimultaneousNavigationWithTwoWebUIs2
--ResourceDispatcherHostTest.CancelRequestsForContext
--ResourceDispatcherHostTest.CancelRequestsForContextTransferred
--ResourceDispatcherHostTest.ForbiddenDownload
--ResourceDispatcherHostTest.IgnoreCancelForDownloads
--ResourceDispatcherHostTest.UnknownURLScheme
+-RenderViewHostTest.NavigationWithBadHistoryItemFiles
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.CancelRequestsForContext/0
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.CancelRequestsForContext/1
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.ForbiddenDownload/0
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.ForbiddenDownload/1
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.UnknownURLScheme/0
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.UnknownURLScheme/1
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.CancelRequestsForContextTransferred/1
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.CancelRequestsForContextTransferred/0
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.IgnoreCancelForDownloads/0
+-ResourceDispatcherHostTests/ResourceDispatcherHostTest.IgnoreCancelForDownloads/1
 -WebContentsImplTest.CrossSiteNavigationBackOldNavigationIgnored
 -WebContentsImplTest.CrossSiteNavigationBackPreempted
 -WebContentsImplTest.CrossSiteNotPreemptedDuringBeforeUnload
 -WebContentsImplTest.FindOpenerRVHWhenPending
 -WebContentsImplTest.NoEarlyStop
--WebContentsImplTestWithSiteIsolation.StartStopEventsBalance
\ No newline at end of file
+-WebContentsImplTestWithSiteIsolation.StartStopEventsBalance
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation
index 2e32d06..0926ff9 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation
@@ -1,693 +1,123 @@
-# Note: the following unexpected successes are a merge of the results from two 
-# runs (removing the results that were expected to fail).
+# Last updated: 2016-24-2 based on results from the trybot
+# linux_chromium_browser_side_navigation_rel
 
-# Expected to crash, but passed: (2)
-  virtual/spv2/paint/paintlayer/non-self-painting-layer-overrides-visibility.html [ Pass ]
+# Run 1
+# Expected to fail, but passed: (6)
+  editing/pasteboard/4944770-2.html
+  fast/css/absolute-inline-alignment.html
+  fast/dom/shadow/scoped-events-by-ua-stopped.html
+  fast/encoding/invalid-UTF-8.html
+  fast/forms/month/month-appearance-l10n.html
+  fast/inline/nested-text-descendants.html
+  fast/text/ellipsis-stroked.html
+  fast/text/emoticons.html
+  fast/text/international/bdi-dir-default-to-auto.html
+  fast/text/international/hindi-spacing.html
+  fast/text/international/inline-plaintext-is-isolated.html
+  fast/text/selection-multiple-runs.html
+  fast/text/unicode-variation-selector.html
+  http/tests/media/progress-events-generated-correctly.html
+  http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked.html
+  http/tests/xmlviewer/dumpAsText/svg.xml
+  ietestcenter/css3/multicolumn/column-width-applies-to-007.htm
+  ietestcenter/css3/multicolumn/column-width-applies-to-009.htm
+  ietestcenter/css3/multicolumn/column-width-applies-to-012.htm
+  ietestcenter/css3/multicolumn/column-width-applies-to-015.htm
+  imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-external-font-face-01.html
+  imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/variables/variable-font-face-01.html
+  imported/web-platform-tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/getusermedia-optional-constraint.html
+  virtual/rootlayerscrolls/fast/scrolling/fractional-scroll-offset-fixed-position-non-composited.html
+  virtual/rootlayerscrolls/scrollbars/custom-scrollbar-changing-style.html
 
 # Expected to timeout, but passed: (4)
-  http/tests/inspector/service-workers/user-agent-override.html [ Pass ]
-  inspector/elements/edit/edit-dom-actions.html [ Pass ]
+  inspector/elements/edit/edit-dom-actions.html
 
-# Expected to fail, but passed: (28)
-  editing/pasteboard/4944770-2.html [ Pass ]
-  fast/css/absolute-inline-alignment.html [ Pass ]
-  fast/inline/nested-text-descendants.html [ Pass ]
-  fast/text/ellipsis-stroked.html [ Pass ]
-  fast/text/international/inline-plaintext-is-isolated.html [ Pass ]
-  fast/text/unicode-variation-selector.html [ Pass ]
-  http/tests/media/progress-events-generated-correctly.html [ Pass ]
-  http/tests/xmlviewer/dumpAsText/svg.xml [ Pass ]
-  ietestcenter/css3/multicolumn/column-width-applies-to-007.htm [ Pass ]
-  ietestcenter/css3/multicolumn/column-width-applies-to-009.htm [ Pass ]
-  ietestcenter/css3/multicolumn/column-width-applies-to-012.htm [ Pass ]
-  ietestcenter/css3/multicolumn/column-width-applies-to-015.htm [ Pass ]
-  virtual/rootlayerscrolls/fast/scrolling/fractional-scroll-offset-fixed-position-non-composited.html [ Pass ]
-  virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-scrolling-no-visibility-hidden-child.html [ Pass ]
-  virtual/spv2/paint/invalidation/invalidate-when-receiving-paint-layer.html [ Pass ]
-  virtual/spv2/paint/invalidation/repaint-subsequence-on-ancestor-clip-change.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-cell-append.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-cell-remove.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-cell-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-col-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-colgroup-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-row-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-table-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/cached-change-tbody-border-width.html [ Pass ]
-  virtual/spv2/paint/invalidation/spv2/focus-ring-on-continuation-move.html [ Pass ]
-  virtual/spv2/paint/overflow/interest-rect-change-scroll-down.html [ Pass ]
-
-
-# Note: the following unexpected failures contain the results from two runs, the
-# 2nd being what was found after using the 1st as the expectations
-
-# Results from the 1st run:
-
-# Regressions: Unexpected crashes (46)
+# Regressions: Unexpected crashes (53)
+  dom/xhtml/level2/html/HTMLIFrameElement11.xhtml [ Crash ]
   editing/execCommand/apply-style-command-crash.html [ Crash ]
+  editing/pasteboard/drag-files-to-editable-element.html [ Crash ]
+  editing/pasteboard/drop-file-svg.html [ Crash ]
+  editing/pasteboard/file-drag-to-editable.html [ Crash ]
   editing/style/apply-style-crash.html [ Crash ]
+  fast/css/acid2-pixel.html [ Crash ]
+  fast/css/acid2.html [ Crash ]
+  fast/dom/Document/readystate.html [ Crash ]
+  fast/dom/HTMLObjectElement/children-changed.html [ Crash ]
+  fast/dom/HTMLScriptElement/script-element-moved-to-detached-document-crash.html [ Crash ]
+  fast/dom/Range/acid3-surround-contents.html [ Crash ]
+  fast/dom/Window/window-resize-and-move-sub-frame.html [ Crash ]
+  fast/dom/exception-no-frame-timeout-crash.html [ Crash ]
   fast/dom/location-new-window-no-crash.html [ Crash ]
-  fast/frames/iframe-plugin-load-remove-document-crash.html [ Crash ]
+  fast/dom/null-document-location-assign-crash.html [ Crash ]
+  fast/dom/null-document-location-href-put-crash.html [ Crash ]
+  fast/dom/null-document-location-put-crash.html [ Crash ]
+  fast/dom/null-document-location-replace-crash.html [ Crash ]
+  http/tests/appcache/main-resource-hash.html [ Crash ]
+  http/tests/appcache/main-resource-redirect.html [ Crash ]
+  http/tests/appcache/non-html.xhtml [ Crash ]
+  http/tests/appcache/offline-access.html [ Crash ]
+  http/tests/cache/iframe-304-crash.html [ Crash ]
   http/tests/history/cross-origin-redirect-on-back.html [ Crash ]
-  http/tests/history/post-replace-state-reload.html [ Crash Failure Failure Failure ]
-  http/tests/loading/pdf-commit-load-callbacks.html [ Crash ]
-  http/tests/navigation/timerredirect-subframeload.html [ Crash Failure Crash Crash ]
-  http/tests/security/mixedContent/active-subresource-in-iframe-blocked.https.html [ Crash ]
-  http/tests/security/xss-DENIED-javascript-with-spaces.html [ Crash ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-006.html [ Crash Crash Crash Failure ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-009.html [ Crash Failure Crash Failure ]
+  http/tests/history/post-replace-state-reload.html [ Crash ]
+  http/tests/navigation/location-reload-after-post.php [ Crash ]
+  http/tests/serviceworker/fetch-frame-resource.html [ Crash ]
+  virtual/pointerevent/fast/events/before-unload-return-bad-value.html [ Crash ]
+  virtual/pointerevent/fast/events/before-unload-return-value-from-listener.html [ Crash ]
+  virtual/pointerevent/fast/events/before-unload-returnValue.html [ Crash ]
+  virtual/pointerevent/fast/events/drop-handler-should-not-stop-navigate.html [ Crash ]
+  virtual/pointerevent/fast/events/focusingUnloadedFrame.html [ Crash ]
+  virtual/pointerevent/fast/events/onload-webkit-before-webcore.html [ Crash ]
+  virtual/pointerevent/fast/events/onloadFrameCrash.html [ Crash ]
+  virtual/pointerevent/fast/events/only-valid-drop-targets-receive-file-drop.html [ Crash ]
+  virtual/pointerevent/fast/events/popup-blocking-click-in-iframe.html [ Crash ]
+  virtual/pointerevent/fast/events/simulated-click-on-anchor-with-target-blank.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/before-unload-return-bad-value.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/before-unload-return-value-from-listener.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/before-unload-returnValue.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/drop-handler-should-not-stop-navigate.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/focusingUnloadedFrame.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/isolated-worlds-override-keystate.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/main-world-does-not-override-keystate.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/onload-webkit-before-webcore.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/onloadFrameCrash.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/only-valid-drop-targets-receive-file-drop.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/popup-blocking-click-in-iframe.html [ Crash ]
+  virtual/trustedeventsdefaultaction/fast/events/simulated-click-on-anchor-with-target-blank.html [ Crash ]
 
-# Regressions: Unexpected missing results (81)
-  fast/dom/HTMLAnchorElement/anchor-in-noscroll-iframe.html [ Missing ]
-  fast/dom/Range/create-contextual-fragment-namespaces1.html [ Missing ]
-  fast/dom/Range/create-contextual-fragment-namespaces2.html [ Missing ]
-  fast/dom/exception-no-frame-inline-script-crash.html [ Missing ]
-  fast/events/drag-and-drop-autoscroll-frameset.html [ Missing ]
-  fast/events/keydown-remove-frame.html [ Missing ]
-  fast/forms/form-and-frame-interaction-retains-values.html [ Missing ]
-  fast/frames/frame-set-location-badstring.html [ Missing ]
-  fast/frames/set-parent-src-synchronously.html [ Missing ]
-  fast/frames/set-parent-src-synchronously.xhtml [ Missing ]
-  http/tests/inspector/change-iframe-src.html [ Missing ]
-  http/tests/inspector/console-cd-completions.html [ Missing ]
-  http/tests/inspector/console-cd.html [ Missing ]
-  http/tests/inspector/console-show-all-messages.html [ Missing ]
-  http/tests/inspector/resource-tree/resource-tree-frame-navigate.html [ Missing ]
-  http/tests/inspector/resource-tree/resource-tree-reload.html [ Missing ]
-  http/tests/inspector/search/search-in-non-existing-resource.html [ Missing ]
-  http/tests/inspector/search/search-in-resource.html [ Missing ]
-  http/tests/inspector/search/search-in-script.html [ Missing ]
-  http/tests/inspector/search/search-in-static.html [ Missing ]
-  http/tests/inspector/sources/debugger/pause-in-removed-frame.html [ Missing ]
+# Regressions: Unexpected missing results (1)
   http/tests/security/upgrade-insecure-requests/https-header-top-level.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/00.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/01.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/02.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/03.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/04.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/05.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/06.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/07.html [ Missing Missing Missing Crash ]
-  http/tests/xmlhttprequest/origin-exact-matching/08.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/09.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/10.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/11.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/12.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/13.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/14.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/15.html [ Missing Crash Missing Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/16.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/17.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/18.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/19.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/20.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/21.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/22.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/23.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/24.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/25.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/26.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/27.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/28.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/29.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/30.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/31.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/32.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/33.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/34.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/35.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/36.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/37.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/38.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/39.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/40.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/41.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/42.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/43.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/44.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/45.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/46.html [ Missing ]
-  http/tests/xmlhttprequest/origin-exact-matching/47.html [ Missing ]
-  inspector/elements/dom-search-crash.html [ Missing ]
-  inspector/elements/edit/set-outer-html-body.html [ Missing ]
-  inspector/elements/elements-panel-rewrite-href.html [ Missing ]
-  inspector/elements/hide-shortcut.html [ Missing ]
-  inspector/elements/iframe-load-event.html [ Missing ]
-  virtual/pointerevent/fast/events/drag-and-drop-autoscroll-frameset.html [ Missing ]
-  virtual/pointerevent/fast/events/drag-outside-window.html [ Missing ]
-  virtual/pointerevent/fast/events/keydown-remove-frame.html [ Missing ]
-  virtual/trustedeventsdefaultaction/fast/events/drag-and-drop-autoscroll-frameset.html [ Missing ]
-  virtual/trustedeventsdefaultaction/fast/events/drag-outside-window.html [ Missing ]
-  virtual/trustedeventsdefaultaction/fast/events/keydown-remove-frame.html [ Missing ]
 
-# Regressions: Unexpected image and text failures (51)
-  compositing/iframes/composited-iframe-alignment.html [ Failure ]
-  compositing/iframes/composited-iframe-scroll.html [ Failure Failure Failure Failure ]
-  compositing/iframes/iframe-copy-on-scroll.html [ Failure Failure Failure Timeout ]
-  compositing/iframes/scroll-fixed-transformed-element.html [ Failure ]
-  compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ Failure Failure Failure Failure ]
-  css2.1/20110323/replaced-intrinsic-001.htm [ Failure ]
-  css2.1/20110323/replaced-intrinsic-002.htm [ Failure ]
-  css2.1/20110323/replaced-intrinsic-003.htm [ Failure ]
-  css2.1/20110323/replaced-intrinsic-004.htm [ Failure ]
-  editing/execCommand/find-after-replace.html [ Failure ]
-  editing/pasteboard/copy-standalone-image.html [ Failure ]
-  editing/pasteboard/drag-drop-dead-frame.html [ Failure ]
-  editing/pasteboard/drag-image-to-contenteditable-in-iframe.html [ Failure ]
-  editing/selection/drag-to-contenteditable-iframe.html [ Failure ]
-  editing/selection/iframe.html [ Failure ]
-  editing/selection/select-all-iframe.html [ Failure ]
-  fast/block/positioning/window-height-change.html [ Failure ]
-  fast/css/acid2-pixel.html [ Failure ]
-  fast/css/preserve-user-specified-zoom-level-on-reload.html [ Failure ]
-  fast/forms/textarea/basic-textareas.html [ Failure ]
-  fast/frames/frame-navigation.html [ Failure ]
-  fast/frames/frame-scrolling-attribute.html [ Failure ]
-  fast/frames/frameElement-frame.html [ Failure ]
-  fast/frames/frameElement-iframe.html [ Failure Failure Failure Failure ]
-  fast/frames/iframe-scrolling-attribute.html [ Failure ]
-  fast/images/exif-orientation-image-document.html [ Failure Failure Failure Failure ]
-  fast/overflow/scrollRevealButton.html [ Failure Failure Failure Timeout ]
-  fast/repaint/fixed-move-after-keyboard-scroll.html [ Failure Failure Failure Failure ]
-  fast/repaint/nested-iframe-scroll-inner.html [ Failure Failure Failure Failure ]
-  http/tests/misc/acid2-pixel.html [ Failure ]
-  http/tests/misc/favicon-as-image.html [ Failure ]
-  http/tests/misc/frame-access-during-load.html [ Failure ]
-  http/tests/misc/location-replace-crossdomain.html [ Failure ]
-  http/tests/misc/object-embedding-svg-delayed-size-negotiation-2.htm [ Failure ]
-  paint/frames/frameset-with-stacking-context-and-not-stacking-context-children.html [ Failure ]
-  paint/frames/frameset-with-stacking-contexts.html [ Failure ]
-  svg/as-image/img-preserveAspectRatio-support-2.html [ Failure ]
-  svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
-  svg/custom/embedding-external-svgs.xhtml [ Failure ]
-  svg/custom/object-sizing-no-width-height.xhtml [ Failure ]
-  svg/custom/object-sizing.xhtml [ Failure ]
-  svg/dynamic-updates/SVGAElement-dom-href-attr.html [ Failure ]
-  svg/dynamic-updates/SVGAElement-dom-target-attr.html [ Failure ]
-  svg/dynamic-updates/SVGAElement-svgdom-href-prop.html [ Failure ]
-  svg/dynamic-updates/SVGAElement-svgdom-target-prop.html [ Failure ]
-  svg/hixie/intrinsic/003.html [ Failure ]
-  svg/hixie/rendering-model/003.xhtml [ Failure ]
-  svg/wicd/test-rightsizing-a.xhtml [ Failure ]
-  tables/mozilla/bugs/bug131020.html [ Failure ]
-  tables/mozilla/bugs/bug4527.html [ Failure ]
-  tables/mozilla/bugs/bug50695-2.html [ Failure ]
-
-# Regressions: Unexpected image-only failures (52)
-  compositing/culling/clear-fixed-iframe.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-composited.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-1-iframe.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html [ Failure ]
-  compositing/gestures/gesture-tapHighlight-2-iframe.html [ Failure ]
-  css3/background/background-positioning-area-vrl.html [ Failure ]
-  css3/blending/background-blend-mode-body-iframe-transparent-color.html [ Failure ]
-  css3/blending/background-blend-mode-body-iframe.html [ Failure ]
-  editing/pasteboard/data-transfer-items-image-png.html [ Failure ]
-  editing/selection/4776665.html [ Failure ]
-  editing/selection/deleteFromDocument-crash.html [ Failure ]
-  editing/selection/iframe-select.html [ Failure ]
-  fast/frames/iframe-double-scale-contents.html [ Failure ]
-  fast/repaint/nested-iframe-scroll-outer.html [ Failure Failure Failure Timeout ]
-  fast/replaced/border-radius-clip-content-edge.html [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-007.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-015.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-017.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-019.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-021.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-023.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-025.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-027.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-029.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-031.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vrl-022.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vrl-024.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vrl-026.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vrl-028.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vrl-032.xht [ Failure ]
-  imported/csswg-test/css-writing-modes-3/background-size-document-root-vrl-002.html [ Failure ]
-  imported/csswg-test/css-writing-modes-3/background-size-document-root-vrl-004.html [ Failure ]
-  imported/csswg-test/css-writing-modes-3/background-size-document-root-vrl-006.html [ Failure ]
-  imported/csswg-test/css-writing-modes-3/background-size-document-root-vrl-008.html [ Failure ]
-  scrollbars/custom-scrollbar-for-iframe-changing-dynamically.html [ Failure ]
-  svg/animations/viewspec-animated-viewbox.html [ Failure ]
-  svg/animations/viewspec-checkaspectparams.html [ Failure ]
-  svg/as-image/svgview-references.html [ Failure ]
-  svg/custom/anchor-on-use.svg [ Failure ]
-  virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-for-iframe-changing-dynamically.html [ Failure ]
-  virtual/rootlayerscrolls/scrollbars/custom-scrollbar-for-iframe-changing-dynamically.html [ Failure ]
-
-# Regressions: Unexpected timeouts (300)
-  bluetooth/iframeRequestDevice.html [ Timeout ]
-  compositing/force-compositing-mode/overflow-hidden-iframe-layer.html [ Timeout ]
-  compositing/force-compositing-mode/overflow-iframe-enter-compositing.html [ Timeout ]
-  compositing/iframes/nested-iframe-scrolling.html [ Timeout ]
-  compositing/rtl/rtl-overflow-scrolling.html [ Timeout Failure Failure Failure ]
-  editing/pasteboard/drag-drop-iframe-refresh-crash.html [ Timeout ]
-  editing/pasteboard/subframe-dragndrop-1.html [ Timeout ]
-  editing/selection/select-bidi-run.html [ Timeout Failure Failure Failure ]
-  fast/autoresize/autoresize-with-iframe.html [ Timeout ]
-  fast/css/media-query-insert-rule.html [ Timeout ]
-  fast/dom/HTMLDialogElement/inert-focus-in-frames.html [ Timeout ]
-  fast/dom/attr_dead_doc.html [ Timeout ]
-  fast/dom/defaultView-on-detached-document.html [ Timeout ]
-  fast/events/autoscroll-in-overflow-hidden-html.html [ Timeout ]
-  fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html [ Timeout ]
-  fast/events/autoscroll-scrollable-iframe-div.html [ Timeout ]
-  fast/events/autoscroll-upwards-propagation-no-scroll-iframe.html [ Timeout Failure Failure Failure ]
-  fast/events/autoscroll-upwards-propagation-overflow-hidden-iframe-body.html [ Timeout Failure Failure Failure ]
-  fast/events/autoscroll-with-non-scrollable-parent.html [ Timeout ]
-  fast/events/before-unload-return-bad-value.html [ Timeout Failure Failure Failure ]
-  fast/events/before-unload-return-value-from-listener.html [ Timeout Failure Failure Failure ]
-  fast/events/before-unload-returnValue.html [ Timeout Failure Failure Failure ]
-  fast/events/before-unload-with-subframes.html [ Timeout Failure Failure Failure ]
-  fast/events/drag-file-crash.html [ Timeout Failure Failure Failure ]
-  fast/events/drag-in-frames.html [ Timeout ]
-  fast/events/drag-outside-window.html [ Timeout Missing Missing Missing ]
-  fast/events/iframe-onmousemove.html [ Timeout ]
-  fast/events/open-window-from-another-frame.html [ Timeout ]
-  fast/events/pageshow-pagehide.html [ Timeout ]
-  fast/events/popup-blocking-click-in-iframe.html [ Timeout ]
-  fast/events/scroll-div-with-prevent-default-in-subframe.html [ Timeout ]
-  fast/events/tabindex-focus-blur-all.html [ Timeout ]
-  fast/events/touch/multi-touch-inside-iframes.html [ Timeout ]
-  fast/events/touch/multi-touch-inside-nested-iframes.html [ Timeout ]
-  fast/events/touch/touch-fractional-coordinates.html [ Timeout Failure Failure Failure ]
-  fast/events/window-onerror-sandbox-01.html [ Timeout ]
-  fast/forms/date-multiple-fields/date-multiple-fields-reset-value-after-reloads.html [ Timeout Failure Failure Failure ]
-  fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-reset-value-after-reloads.html [ Timeout Failure Failure Failure ]
-  fast/forms/month-multiple-fields/month-multiple-fields-reset-value-after-reloads.html [ Timeout Failure Timeout Failure ]
-  fast/forms/number/number-spinbutton-crash-on-detach.html [ Timeout ]
-  fast/forms/time-multiple-fields/time-multiple-fields-reset-value-after-reload.html [ Timeout Failure Failure Failure ]
-  fast/forms/time-multiple-fields/time-multiple-fields-spinbutton-click-in-iframe.html [ Timeout Failure Failure Failure ]
-  fast/forms/week-multiple-fields/week-multiple-fields-reset-value-after-reloads.html [ Timeout Failure Failure Failure ]
-  fast/forms/xss-auditor-doesnt-crash-on-post-submit.html [ Timeout ]
-  fast/frames/detach-frame-during-focus.html [ Timeout Failure Timeout Failure ]
-  fast/frames/empty-cols-attribute.html [ Timeout Failure Failure Failure ]
-  fast/frames/empty-frame-src.html [ Timeout Failure Failure Failure ]
-  fast/frames/frame-dead-region.html [ Timeout Failure Failure Failure ]
-  fast/frames/frame-element-name.html [ Timeout Missing Missing Missing ]
-  fast/frames/onlyCommentInIFrame.html [ Timeout Failure Failure Failure ]
-  fast/frames/paint-iframe-background.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-01.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-02.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-03.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-04.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-05.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-06.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-07.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-08.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-09.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-10.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-11.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-12.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-13.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-attribute-parsing-14.html [ Timeout Failure Failure Failure ]
-  fast/frames/sandboxed-iframe-forms-dynamic.html [ Timeout ]
-  fast/frames/sandboxed-iframe-navigation-top-by-name-denied.html [ Timeout Missing Missing Missing ]
-  fast/history/history-back-forward-within-subframe-hash.html [ Timeout ]
-  fast/history/history-length-append-subframe-with-hash.html [ Timeout Failure Failure Failure ]
-  fast/history/history-replace-updates-current-item.html [ Timeout Failure Failure Failure ]
-  fast/history/same-document-iframes-changing-fragment.html [ Timeout Failure Failure Failure ]
-  fast/history/same-document-iframes-changing-pushstate.html [ Timeout Failure Failure Failure ]
-  fast/history/saves-state-after-frame-nav.html [ Timeout ]
-  fast/images/extra-image-in-image-document.html [ Timeout Timeout Timeout Failure ]
-  fast/images/favicon-as-image.html [ Timeout Failure Failure Failure ]
-  fast/loader/ping-error.html [ Timeout ]
-  fast/loader/plain-text-document.html [ Timeout Failure Failure Failure ]
-  fast/loader/recursive-before-unload-crash.html [ Timeout Failure Failure Failure ]
-  fast/loader/reload-zero-byte-plugin.html [ Timeout Crash Crash Crash ]
-  fast/loader/remove-iframe-during-history-navigation-different.html [ Timeout ]
-  fast/loader/remove-iframe-during-history-navigation-same.html [ Timeout ]
-  fast/loader/scroll-position-restored-on-reload-at-load-event.html [ Timeout Failure Failure Failure ]
-  fast/loader/stateobjects/pushstate-with-fragment-urls-and-hashchange.html [ Timeout Timeout Timeout Failure ]
-  fast/loader/subframe-removes-itself.html [ Timeout Failure Failure Failure ]
-  fast/loader/subframe-self-close.html [ Timeout Failure Failure Failure ]
-  fast/loader/text-document-wrapping.html [ Timeout Failure Failure Failure ]
-  fast/media/w3c/test_media_queries.html [ Timeout Timeout Timeout Missing ]
-  fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe.html [ Timeout ]
-  fast/repaint/invalidate-paint-in-iframe-in-composited-layer.html [ Timeout ]
-  fast/repaint/nested-fixed-iframe-scrolled.html [ Timeout ]
-  fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries.html [ Timeout ]
-  fast/repaint/repaint-in-iframe.html [ Timeout ]
-  fast/repaint/selection-change-in-iframe-with-relative-parent.html [ Timeout Timeout Failure Timeout ]
-  fast/repaint/text-match-document-change.html [ Timeout ]
-  fast/scroll-behavior/subframe-element-scroll.html [ Timeout ]
-  fast/scroll-behavior/subframe-element-scrollBy.html [ Timeout ]
-  fast/scroll-behavior/subframe-element-scrollTo.html [ Timeout ]
-  fast/scroll-behavior/subframe-interrupted-scroll.html [ Timeout ]
-  fast/scroll-behavior/subframe-scroll.html [ Timeout ]
-  fast/scroll-behavior/subframe-scrollBy.html [ Timeout ]
-  fast/scroll-behavior/subframe-scrollLeft.html [ Timeout ]
-  fast/scroll-behavior/subframe-scrollTo.html [ Timeout ]
-  fast/scroll-behavior/subframe-scrollTop.html [ Timeout ]
-  fast/text/international/bdi-dir-default-to-auto.html [ Timeout Pass ]
-  fast/tokenizer/text-plain.html [ Timeout Failure Failure Failure ]
-  fullscreen/exit-full-screen-iframe.html [ Timeout ]
-  fullscreen/full-screen-frameset.html [ Timeout ]
-  fullscreen/full-screen-iframe-allowed.html [ Timeout ]
-  fullscreen/full-screen-iframe-legacy.html [ Timeout ]
-  fullscreen/full-screen-iframe-not-allowed.html [ Timeout ]
-  fullscreen/full-screen-iframe-zIndex.html [ Timeout Failure Timeout Timeout ]
-  http/tests/appcache/fallback.html [ Timeout ]
-  http/tests/appcache/main-resource-hash.html [ Timeout ]
-  http/tests/appcache/main-resource-redirect.html [ Timeout ]
-  http/tests/appcache/non-html.xhtml [ Timeout ]
-  http/tests/appcache/offline-access.html [ Timeout ]
-  http/tests/appcache/remove-cache.html [ Timeout Failure Failure Failure ]
-  http/tests/appcache/top-frame-2.html [ Timeout ]
-  http/tests/cache/xhr-vary-header.html [ Timeout ]
-  http/tests/fullscreen/fullscreenelement-different-origin.html [ Timeout ]
-  http/tests/fullscreen/fullscreenelement-same-origin.html [ Timeout ]
-  http/tests/history/back-to-post.html [ Timeout ]
-  http/tests/history/cross-origin-replace-history-object-child.html [ Timeout ]
-  http/tests/history/cross-origin-replace-history-object.html [ Timeout ]
-  http/tests/inspector/extensions-network-redirect.html [ Timeout ]
-  http/tests/inspector/inspect-element.html [ Timeout Missing Missing Missing ]
-  http/tests/inspector/inspect-iframe-from-different-domain.html [ Timeout Missing Missing Missing ]
-  http/tests/inspector/resource-har-conversion.html [ Timeout Failure Failure Failure ]
-  http/tests/inspector/resource-parameters.html [ Timeout Failure Failure Failure ]
-  http/tests/messaging/cross-domain-message-send.html [ Timeout ]
-  http/tests/misc/adopt-iframe-src-attr-after-remove.html [ Timeout ]
-  http/tests/misc/delete-frame-during-readystatechange-with-gc-after-video-removal.html [ Timeout ]
-  http/tests/misc/delete-frame-during-readystatechange.html [ Timeout ]
-  http/tests/misc/url-in-utf16be.html [ Timeout ]
-  http/tests/misc/url-in-utf16le.html [ Timeout ]
-  http/tests/misc/url-in-utf32be.html [ Timeout ]
-  http/tests/misc/url-in-utf32le.html [ Timeout ]
-  http/tests/misc/webtiming-cross-origin-and-back.html [ Timeout Failure Failure Failure ]
-  http/tests/misc/webtiming-one-redirect.php [ Timeout Failure Failure Failure ]
-  http/tests/misc/webtiming-two-redirects.php [ Timeout Failure Failure Failure ]
-  http/tests/misc/window-dot-stop.html [ Timeout Failure Failure Failure ]
-  http/tests/misc/window-open-then-write.html [ Timeout ]
-  http/tests/misc/xhtml.php [ Timeout Failure Failure Failure ]
-  http/tests/navigation/anchor-frames.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/anchor-subframeload.html [ Timeout Crash Crash Crash ]
-  http/tests/navigation/back-to-dynamic-iframe.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/back-to-slow-frame.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/cross-origin-fragment-navigation-is-async.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/error404-frames.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/forward-and-cancel.html [ Timeout ]
-  http/tests/navigation/forward-to-fragment-fires-onload.html [ Timeout ]
-  http/tests/navigation/history-back-across-form-submission-to-fragment.html [ Timeout ]
-  http/tests/navigation/javascriptlink-frames.html [ Timeout Failure Crash Failure ]
-  http/tests/navigation/location-reload-after-post.php [ Timeout Failure Failure Failure ]
-  http/tests/navigation/response204.html [ Timeout ]
-  http/tests/navigation/scrollstate-after-http-equiv-refresh-fragment-identifier-2.html [ Timeout ]
-  http/tests/navigation/scrollstate-after-http-equiv-refresh-fragment-identifier.html [ Timeout ]
-  http/tests/navigation/scrollstate-after-http-equiv-refresh.html [ Timeout Timeout Timeout Crash ]
-  http/tests/navigation/scrollstate-after-location-reload.html [ Timeout ]
-  http/tests/pointer-lock/iframe-sandboxed-allow-pointer-lock.html [ Timeout ]
-  http/tests/pointer-lock/iframe-sandboxed-nested-allow-pointer-lock.html [ Timeout ]
-  http/tests/pointer-lock/iframe-sandboxed-nested-disallow-then-allow-pointer-lock.html [ Timeout ]
-  http/tests/pointer-lock/iframe-sandboxed.html [ Timeout ]
-  http/tests/pointer-lock/pointerlockelement-different-origin.html [ Timeout ]
-  http/tests/pointer-lock/pointerlockelement-same-origin.html [ Timeout ]
-  http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html [ Timeout ]
-  http/tests/security/aboutBlank/xss-DENIED-navigate-opener-document-write.html [ Timeout ]
-  http/tests/security/aboutBlank/xss-DENIED-navigate-opener-javascript-url.html [ Timeout ]
-  http/tests/security/aboutBlank/xss-DENIED-set-opener.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/block-mixed-content-hides-warning.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-01.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-02.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-03.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-04.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-05.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/directive-parsing-multiple-headers.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/frame-src-allowed.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/frame-src-redirect-blocked.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/iframe-inside-csp.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/image-document-default-src-none.html [ Timeout Failure Failure Failure ]
-  http/tests/security/contentSecurityPolicy/redirect-does-not-match-paths.html [ Timeout ]
-  http/tests/security/drag-drop-different-origin.html [ Timeout ]
-  http/tests/security/frameNavigation/xss-ALLOWED-targeted-subframe-navigation-change.html [ Timeout ]
-  http/tests/security/frameNavigation/xss-DENIED-targeted-link-navigation.html [ Timeout ]
-  http/tests/security/host-compare-case-insensitive.html [ Timeout ]
-  http/tests/security/postMessage/delivery-order.html [ Timeout ]
-  http/tests/security/postMessage/origin-unaffected-by-base-tag.html [ Timeout ]
-  http/tests/security/postMessage/target-origin.html [ Timeout ]
-  http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-insecure-origin.html [ Timeout ]
-  http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-secure-origin.html [ Timeout ]
-  http/tests/security/sandbox-inherit-to-initial-document-2.html [ Timeout ]
-  http/tests/security/sandbox-inherit-to-initial-document.html [ Timeout ]
-  http/tests/security/srcdoc-inherits-referrer-for-forms.html [ Timeout ]
-  http/tests/security/xss-DENIED-method-with-iframe-proto.html [ Timeout Failure Failure Failure ]
-  http/tests/security/xss-DENIED-sandboxed-iframe.html [ Timeout Failure Failure Failure ]
-  http/tests/serviceworker/chromium/windowclient-focus.html [ Timeout ]
-  http/tests/serviceworker/fetch-mixed-content-to-outscope.html [ Timeout Crash Crash Crash ]
-  http/tests/serviceworker/fetch-request-fallback.html [ Timeout Failure Failure Failure ]
-  http/tests/serviceworker/navigation-redirect-to-http.html [ Timeout Crash Crash Crash ]
-  http/tests/serviceworker/request-end-to-end.html [ Timeout Failure Failure Failure ]
-  http/tests/storage/callbacks-are-called-in-correct-context.html [ Timeout ]
-  http/tests/w3c/webperf/approved/navigation-timing/html/test_navigation_type_reload.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_memory_cached.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain_allow_timing.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_with_timing_allow_origin.html [ Timeout ]
-  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_same_origin_redirect.html [ Timeout ]
-  http/tests/xmlhttprequest/access-control-preflight-request-must-not-contain-cookie.html [ Timeout Crash Failure Timeout ]
-  imported/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.sub.htm [ Timeout Failure Failure Failure ]
-  paint/invalidation/frame-move-keep-content-location.html [ Timeout ]
-  paint/selection/selection-drag-image-in-iframe.html [ Timeout ]
-  svg/as-object/history-navigation.html [ Timeout Timeout Failure Timeout ]
-  svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Timeout Failure Timeout Failure ]
-  svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Timeout Failure Failure Failure ]
-  virtual/android/fullscreen/exit-full-screen-iframe.html [ Timeout ]
-  virtual/android/fullscreen/full-screen-frameset.html [ Timeout ]
-  virtual/android/fullscreen/full-screen-iframe-allowed.html [ Timeout ]
-  virtual/android/fullscreen/full-screen-iframe-legacy.html [ Timeout ]
-  virtual/android/fullscreen/full-screen-iframe-not-allowed.html [ Timeout ]
-  virtual/android/fullscreen/full-screen-iframe-zIndex.html [ Timeout ]
-  virtual/pointerevent/fast/events/autoscroll-in-overflow-hidden-html.html [ Timeout ]
-  virtual/pointerevent/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html [ Timeout ]
-  virtual/pointerevent/fast/events/autoscroll-scrollable-iframe-div.html [ Timeout ]
-  virtual/pointerevent/fast/events/autoscroll-with-non-scrollable-parent.html [ Timeout ]
-  virtual/pointerevent/fast/events/drag-in-frames.html [ Timeout ]
-  virtual/pointerevent/fast/events/iframe-onmousemove.html [ Timeout ]
-  virtual/pointerevent/fast/events/open-window-from-another-frame.html [ Timeout ]
-  virtual/pointerevent/fast/events/pageshow-pagehide.html [ Timeout ]
-  virtual/pointerevent/fast/events/popup-blocking-click-in-iframe.html [ Timeout ]
-  virtual/pointerevent/fast/events/scroll-div-with-prevent-default-in-subframe.html [ Timeout ]
-  virtual/pointerevent/fast/events/tabindex-focus-blur-all.html [ Timeout ]
-  virtual/pointerevent/fast/events/touch/multi-touch-inside-iframes.html [ Timeout ]
-  virtual/pointerevent/fast/events/touch/multi-touch-inside-nested-iframes.html [ Timeout ]
-  virtual/pointerevent/fast/events/window-onerror-sandbox-01.html [ Timeout ]
-  virtual/scroll_customization/fast/events/touch/multi-touch-inside-iframes.html [ Timeout ]
-  virtual/scroll_customization/fast/events/touch/multi-touch-inside-nested-iframes.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-element-scroll.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-element-scrollBy.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-element-scrollTo.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-interrupted-scroll.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-scroll.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-scrollBy.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-scrollLeft.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-scrollTo.html [ Timeout ]
-  virtual/scroll_customization/fast/scroll-behavior/subframe-scrollTop.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-element-scroll.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-element-scrollBy.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-element-scrollTo.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-interrupted-scroll.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-scroll.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-scrollBy.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-scrollLeft.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-scrollTo.html [ Timeout ]
-  virtual/threaded/fast/scroll-behavior/subframe-scrollTop.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-in-overflow-hidden-html.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-scrollable-iframe-div.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-with-non-scrollable-parent.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/drag-in-frames.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/iframe-onmousemove.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/keydown-1.html [ Timeout Failure Failure Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/open-window-from-another-frame.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/pageshow-pagehide.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/popup-blocking-click-in-iframe.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/scroll-div-with-prevent-default-in-subframe.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/tabindex-focus-blur-all.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/multi-touch-inside-iframes.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/multi-touch-inside-nested-iframes.html [ Timeout ]
-  virtual/trustedeventsdefaultaction/fast/events/window-onerror-sandbox-01.html [ Timeout ]
-  wake_lock/wakelock-in-nested-frame.html [ Timeout ]
-
-# Regressions: Unexpected text-only failures (644)
-  compositing/force-compositing-mode/overflow-iframe-layer.html [ Failure ]
-  compositing/iframes/become-composited-nested-iframes.html [ Failure ]
-  compositing/iframes/become-overlapped-iframe.html [ Failure ]
-  compositing/iframes/composited-iframe-transition-flicker.html [ Failure ]
-  compositing/iframes/composited-parent-iframe.html [ Failure ]
-  compositing/iframes/connect-compositing-iframe-delayed.html [ Failure Timeout Timeout Timeout ]
-  compositing/iframes/connect-compositing-iframe2.html [ Failure ]
-  compositing/iframes/connect-compositing-iframe3.html [ Failure ]
-  compositing/iframes/iframe-composited-scrolling-hide-and-show.html [ Failure ]
-  compositing/iframes/iframe-resize.html [ Failure ]
-  compositing/iframes/invisible-nested-iframe-show.html [ Failure ]
-  compositing/iframes/overlapped-iframe-iframe.html [ Failure ]
-  compositing/iframes/overlapped-iframe.html [ Failure ]
-  compositing/iframes/overlapped-nested-iframes.html [ Failure Failure Timeout Failure ]
-  compositing/iframes/resizer.html [ Failure ]
-  compositing/iframes/scroll-grandchild-iframe.html [ Failure Failure Failure Failure ]
-  compositing/iframes/scrolling-iframe.html [ Failure Missing Failure Failure ]
-  compositing/iframes/visibility-hidden-transformed-content.html [ Failure Timeout Missing Failure ]
-  compositing/overflow/do-not-crash-use-after-free-update-widget-positions.html [ Failure ]
-  compositing/rtl/rtl-iframe-absolute-overflow.html [ Failure ]
-  compositing/rtl/rtl-iframe-absolute.html [ Failure ]
-  compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ Failure Failure Failure Failure ]
-  compositing/rtl/rtl-iframe-fixed-overflow.html [ Failure Failure Failure Failure ]
-  compositing/rtl/rtl-iframe-fixed.html [ Failure ]
-  compositing/rtl/rtl-iframe-relative.html [ Failure ]
-  compositing/squashing/iframe-inside-squashed-layer.html [ Failure ]
-  dom/html/level2/html/HTMLFrameElement09.html [ Failure ]
-  dom/html/level2/html/HTMLIFrameElement11.html [ Failure ]
-  editing/execCommand/paste-1.html [ Failure ]
-  editing/execCommand/paste-2.html [ Failure ]
-  editing/pasteboard/copy-backslash-with-euc.html [ Failure ]
-  editing/pasteboard/file-drag-to-editable.html [ Failure ]
-  editing/undo/undo-iframe-location-change.html [ Failure ]
-  fast/css/acid2.html [ Failure ]
-  fast/css/resize-corner-tracking-touch.html [ Failure ]
-  fast/dom/Element/scale-page-bounding-client-rect-in-frame.html [ Failure ]
-  fast/dom/Element/scale-page-client-rects-in-frame.html [ Failure ]
-  fast/dom/HTMLTemplateElement/ownerDocument-adoptNode.html [ Failure ]
-  fast/dom/Window/Location/ancestor-origins.html [ Failure ]
-  fast/dom/Window/window-object-cross-frame-calls.html [ Failure ]
-  fast/dom/Window/window-open-parent.html [ Failure ]
-  fast/dom/Window/window-open-pending-url.html [ Failure ]
-  fast/dom/cross-frame-node-prototype.html [ Failure ]
-  fast/dom/custom/reparent-unwrapped-custom-element-crash.html [ Failure ]
+# Regressions: Unexpected text-only failures (69)
   fast/dom/frame-loading-via-document-write.html [ Failure ]
-  fast/dom/nodesFromRect/nodesFromRect-child-frame-content.html [ Failure ]
-  fast/dom/shadow/focus-navigation-skips-non-focusable-shadow-in-iframe.html [ Failure ]
-  fast/dom/window-load-crash.html [ Failure ]
-  fast/encoding/meta-overrules-auto.html [ Failure ]
-  fast/events/drop-handler-should-not-stop-navigate.html [ Failure ]
-  fast/events/focusingUnloadedFrame.html [ Failure ]
-  fast/events/frame-tab-focus.html [ Failure ]
-  fast/events/hit-test-counts.html [ Failure ]
-  fast/events/keydown-1.html [ Failure ]
-  fast/events/keypress-focus-change.html [ Failure ]
-  fast/events/menu-key-context-menu-position.html [ Failure ]
-  fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-  fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-  fast/events/mouse-drag-from-frame.html [ Failure ]
-  fast/events/mousedown-in-subframe-scrollbar.html [ Failure ]
-  fast/events/mousemove-from-iframe-to-top-element.html [ Failure ]
-  fast/events/mouseover-button.html [ Failure ]
-  fast/events/mouseover-mouseout2.html [ Failure ]
-  fast/events/only-valid-drop-targets-receive-file-drop.html [ Failure ]
-  fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Failure ]
-  fast/events/touch/gesture/gesture-tap-active-state-iframe.html [ Failure ]
-  fast/events/touch/gesture/gesture-tap-hover-state-iframe.html [ Failure ]
-  fast/events/touch/gesture/gesture-tap-mouse-events-between-frames.html [ Failure ]
-  fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe.html [ Failure ]
-  fast/forms/number/number-spinbutton-click-in-iframe.html [ Failure ]
-  fast/forms/submit-to-url-fragment.html [ Failure ]
-  fast/forms/suggestion-picker/date-suggestion-picker-reset-value-after-reload.html [ Failure ]
-  fast/forms/suggestion-picker/datetimelocal-suggestion-picker-reset-value-after-reload.html [ Failure ]
-  fast/forms/suggestion-picker/month-suggestion-picker-reset-value-after-reload.html [ Failure ]
-  fast/forms/suggestion-picker/week-suggestion-picker-reset-value-after-reload.html [ Failure Failure Timeout Failure ]
-  fast/frames/contentWindow_Frame.html [ Failure ]
-  fast/frames/iframe-display-none.html [ Failure ]
-  fast/frames/location-change-no-file-access.html [ Failure ]
-  fast/frames/sandboxed-iframe-navigation-top-denied.html [ Failure Failure Failure Timeout ]
-  fast/frames/sandboxed-iframe-scripting-05.html [ Failure ]
-  fast/frames/sandboxed-iframe-storage.html [ Failure ]
-  fast/frames/sandboxed-iframe-workers.html [ Failure ]
-  fast/frames/unload-reparent-sibling-frame.html [ Failure ]
-  fast/frames/xss-auditor-handles-file-urls.html [ Failure ]
-  fast/images/crash-bad-cast.html [ Failure ]
-  fast/images/viewport-in-standalone-image-document.html [ Failure ]
-  fast/js/lexical-lookup-in-function-constructor.html [ Failure ]
-  fast/loader/form-state-restore-with-frames.html [ Failure ]
-  fast/loader/main-document-url-for-non-http-loads.html [ Failure ]
-  fast/loader/page-dismissal-modal-dialogs.html [ Failure ]
-  fast/overflow/overflow-height-float-not-removed-crash.html [ Failure ]
-  fast/overflow/overflow-height-float-not-removed-crash3.html [ Failure ]
-  fast/parser/move-during-parsing.html [ Failure ]
-  fast/parser/script-modify-page-outer.html [ Failure ]
-  fast/parser/xml-colon-entity.html [ Failure ]
-  fast/parser/xml-declaration-missing-ending-mark.html [ Failure ]
-  fast/preloader/iframe-srcdoc.html [ Failure ]
-  fast/repaint/composited-iframe-scroll-repaint.html [ Failure ]
-  fast/repaint/iframe-scroll-repaint.html [ Failure ]
-  fast/repaint/in-scaled-iframe.html [ Failure Timeout Timeout Timeout ]
-  fast/repaint/resize-scrollable-iframe.html [ Failure ]
-  fast/repaint/scrolled-iframe-scrollbar-change.html [ Failure ]
-  fast/repaint/text-selection-rect-in-overflow-2.html [ Failure ]
-  fast/replaced/vertical-resize-100percent-element.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-overflow-hidden.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-scrolling-no-overried-inherited-visibility-hidden.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-scrolling-no.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-scrolling-yes.html [ Failure ]
-  fast/scrolling/scrollable-area-frame-visibility-hidden-child.html [ Failure ]
-  fast/scrolling/scrollable-area-frame.html [ Failure ]
-  fast/spatial-navigation/snav-iframe-nested.html [ Failure ]
-  fast/table/giantCellspacing.html [ Failure ]
-  fast/text/plain-text-line-breaks.html [ Failure ]
-  fast/xsl/subframe-location.html [ Failure ]
-  fast/xsl/xslt-in-subframe.html [ Failure ]
-  fast/xsl/xslt-text.html [ Failure ]
-  http/tests/cache/iframe-304-crash.html [ Failure ]
-  http/tests/dom/document-contentType.html [ Failure ]
-  http/tests/encoding/meta-switch-mid-parse-with-title.html [ Failure ]
-  http/tests/encoding/meta-switch-mid-parse.html [ Failure ]
+  http/tests/appcache/remove-cache.html [ Failure ]
   http/tests/history/push-state-in-grandchild-after-reload.html [ Failure ]
-  http/tests/history/push-state-in-new-frame.html [ Failure ]
   http/tests/inspector/console-resource-errors.html [ Failure ]
   http/tests/inspector/extensions-ignore-cache.html [ Failure ]
   http/tests/inspector/network/network-document-initiator.html [ Failure ]
   http/tests/inspector/network/network-initiator.html [ Failure ]
-  http/tests/loading/307-after-303-after-post.html [ Failure ]
-  http/tests/loading/bad-server-subframe.html [ Failure ]
-  http/tests/loading/promote-img-in-viewport-priority.html [ Failure ]
-  http/tests/loading/redirect-methods.html [ Failure ]
-  http/tests/loading/redirect-with-no-location-crash.html [ Failure ]
-  http/tests/loading/slow-parsing-subframe.html [ Failure ]
-  http/tests/loading/text-content-type-with-binary-extension.html [ Failure ]
-  http/tests/misc/acid2.html [ Failure ]
-  http/tests/misc/charset-sniffer-end-sniffing.html [ Failure ]
-  http/tests/misc/finish-load-resource-timing-buffer-full-crash.html [ Failure ]
-  http/tests/misc/form-action-using-replaceChild.html [ Failure ]
-  http/tests/misc/frame-default-enc-different-domain.html [ Failure ]
-  http/tests/misc/frame-default-enc-same-domain.html [ Failure ]
-  http/tests/misc/frameset-disables-resource-scheduling.html [ Failure ]
-  http/tests/misc/last-modified-parsing.html [ Failure ]
-  http/tests/misc/no-last-modified.html [ Failure ]
-  http/tests/misc/onload-write-during-xframe-deny.html [ Failure ]
+  http/tests/inspector/resource-har-conversion.html [ Failure ]
+  http/tests/inspector/resource-parameters.html [ Failure ]
   http/tests/misc/policy-delegate-called-twice.html [ Failure ]
   http/tests/misc/resource-timing-iframe-restored-from-history.html [ Failure ]
-  http/tests/navigation/metaredirect-frames.html [ Failure ]
+  http/tests/misc/webtiming-cross-origin-and-back.html [ Failure ]
+  http/tests/misc/webtiming-one-redirect.php [ Failure ]
+  http/tests/misc/webtiming-two-redirects.php [ Failure ]
+  http/tests/misc/window-dot-stop.html [ Failure ]
+  http/tests/misc/xhtml.php [ Failure ]
+  http/tests/navigation/back-to-dynamic-iframe.html [ Failure ]
+  http/tests/navigation/back-to-redirect-with-frame.php [ Failure ]
+  http/tests/navigation/cross-origin-fragment-navigation-is-async.html [ Failure ]
   http/tests/navigation/post-frames-goback1.html [ Failure ]
   http/tests/navigation/post-goback-same-url.html [ Failure ]
   http/tests/navigation/post-goback1.html [ Failure ]
-  http/tests/navigation/postredirect-frames.html [ Failure ]
-  http/tests/navigation/redirect-on-back-updates-history-item.html [ Failure ]
-  http/tests/navigation/redirect-on-reload-updates-history-item.html [ Failure Failure Crash Failure ]
-  http/tests/navigation/redirect302-frames.html [ Failure ]
-  http/tests/navigation/relativeanchor-frames.html [ Failure Failure Crash Crash ]
-  http/tests/navigation/reload-subframe-frame.html [ Failure ]
-  http/tests/navigation/reload-subframe-iframe.html [ Failure ]
-  http/tests/navigation/reload-subframe-object.html [ Failure Crash Failure Failure ]
+  http/tests/navigation/redirect-on-reload-updates-history-item.html [ Failure ]
   http/tests/navigation/same-origin-fragment-navigation-is-sync.html [ Failure ]
   http/tests/navigation/success200-frames-loadsame.html [ Failure ]
-  http/tests/navigation/success200-frames.html [ Failure ]
-  http/tests/navigation/timerredirect-frames.html [ Failure ]
-  http/tests/notifications/notification-sandbox-permission.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-allowall.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html [ Failure ]
-  http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-deny.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-invalid.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-multiple-headers-conflict.html [ Failure ]
@@ -697,500 +127,209 @@
   http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-allow.html [ Failure ]
   http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html [ Failure ]
   http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-block.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-unset.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-block.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-unset.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-block.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-unset.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-block.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-unset.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-allow.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-block.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-unset.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-empty.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-filter.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/1.1/reflected-xss-invalid.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/javascript-url-allowed.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/javascript-url-blocked.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/object-src-none-blocked.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/policy-does-not-affect-child.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/register-bypassing-scheme-partial.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/report-uri-from-child-frame.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-allow-scripts-in-http-header-control.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-allow-scripts-in-http-header.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-in-http-header-control.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-in-http-header.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-invalid-header.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/sandbox-report-only.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-loads-with-img-src.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-in-iframe.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-none-inline-event.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-none.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-self-blocked-01.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-self-blocked-02.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-self-blocked-03.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-self.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/script-src-star-cross-scheme.html [ Failure ]
-  http/tests/security/contentSecurityPolicy/srcdoc-doesnt-bypass-script-src.html [ Failure ]
-  http/tests/security/cross-frame-access-call.html [ Failure ]
-  http/tests/security/cross-frame-access-callback-explicit-domain-ALLOW.html [ Failure ]
-  http/tests/security/cross-frame-access-callback-explicit-domain-DENY.html [ Failure ]
-  http/tests/security/cross-frame-access-custom.html [ Failure ]
-  http/tests/security/cross-frame-access-first-time.html [ Failure ]
-  http/tests/security/cross-frame-access-frameelement.html [ Failure ]
-  http/tests/security/cross-frame-access-frames.html [ Failure ]
-  http/tests/security/cross-frame-access-name-getter.html [ Failure ]
-  http/tests/security/cross-frame-access-put.html [ Failure ]
-  http/tests/security/cross-frame-access-set-window-properties.html [ Failure ]
-  http/tests/security/cross-origin-indexeddb-allowed.html [ Failure ]
-  http/tests/security/cross-origin-local-storage-allowed.html [ Failure ]
-  http/tests/security/cross-origin-session-storage-allowed.html [ Failure ]
-  http/tests/security/cross-origin-websql-allowed.html [ Failure ]
-  http/tests/security/cross-origin-window-event-exception.html [ Failure ]
-  http/tests/security/cross-origin-window-open-exception.html [ Failure ]
   http/tests/security/frame-loading-via-document-write.html [ Failure ]
   http/tests/security/isolatedWorld/bypass-main-world-csp-iframes.html [ Failure ]
-  http/tests/security/isolatedWorld/sandboxed-iframe.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-01.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-02.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-03.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-04.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-05.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-06.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-07.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-08.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-09.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-10.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-11.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-12.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-13.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-14.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-15.html [ Failure ]
-  http/tests/security/mime-type-execute-as-html-16.html [ Failure ]
-  http/tests/security/mixedContent/insecure-css-in-iframe.html [ Failure ]
-  http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Failure ]
-  http/tests/security/mixedContent/insecure-iframe-in-iframe.html [ Failure ]
-  http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Failure ]
   http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure ]
-  http/tests/security/mixedContent/insecure-image-in-iframe.html [ Failure ]
-  http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Failure ]
-  http/tests/security/mixedContent/insecure-script-in-iframe.html [ Failure ]
-  http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Failure ]
+  http/tests/security/mixedContent/insecure-prefetch-in-main-frame.html [ Failure ]
   http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Failure ]
-  http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html [ Failure ]
   http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Failure ]
-  http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html [ Failure ]
-  http/tests/security/sandboxed-iframe-blocks-access-from-parent.html [ Failure ]
-  http/tests/security/sandboxed-iframe-document-cookie.html [ Failure ]
-  http/tests/security/sandboxed-iframe-meta-refresh.html [ Failure ]
-  http/tests/security/sandboxed-iframe-modify-self.html [ Failure ]
-  http/tests/security/srcdoc-can-access-parent.html [ Failure ]
-  http/tests/security/srcdoc-in-sandbox-cannot-access-parent.html [ Failure ]
-  http/tests/security/srcdoc-inherits-referrer.html [ Failure ]
-  http/tests/security/suborigins/crossorigin/suborigin-cross-origin-window-event-exception.php [ Failure ]
-  http/tests/security/suborigins/crossorigin/suborigin-cross-origin-window-open-exception.php [ Failure ]
   http/tests/security/upgrade-insecure-requests/https-header-auxiliary.html [ Failure ]
-  http/tests/security/upgrade-insecure-requests/https-header-nested.html [ Failure Failure Timeout Timeout ]
-  http/tests/security/xss-DENIED-assign-location-hash.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-host.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-hostname.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-href-javascript.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-nonstandardProperty.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-pathname.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-protocol.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-reload.html [ Failure ]
-  http/tests/security/xss-DENIED-assign-location-search.html [ Failure ]
-  http/tests/security/xss-DENIED-frame-name.html [ Failure ]
-  http/tests/security/xss-DENIED-getSVGDocument-iframe.html [ Failure ]
-  http/tests/security/xss-DENIED-htmlelelment-with-iframe-proto.html [ Failure ]
-  http/tests/security/xss-DENIED-iframe-src-alias.html [ Failure ]
-  http/tests/security/xss-DENIED-invalid-domain-change.html [ Failure ]
-  http/tests/security/xssAuditor/anchor-url-dom-write-location.html [ Failure ]
+  http/tests/security/upgrade-insecure-requests/https-header-nested.html [ Failure ]
+  http/tests/security/w3c/cross-origin-objects.html [ Failure ]
   http/tests/security/xssAuditor/anchor-url-dom-write-location2.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-control-char.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-direct.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-safe2.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-safe3.html [ Failure ]
-  http/tests/security/xssAuditor/base-href-scheme-relative.html [ Failure ]
-  http/tests/security/xssAuditor/base-href.html [ Failure ]
-  http/tests/security/xssAuditor/chunked-big-script.html [ Failure ]
-  http/tests/security/xssAuditor/cookie-injection.html [ Failure ]
-  http/tests/security/xssAuditor/dom-write-URL.html [ Failure ]
-  http/tests/security/xssAuditor/dom-write-innerHTML.html [ Failure Crash Failure Failure ]
-  http/tests/security/xssAuditor/dom-write-location.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-code-attribute-2.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-code-attribute.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-control-char.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-in-path-unterminated.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-javascript-url.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/embed-tag.html [ Failure ]
-  http/tests/security/xssAuditor/faux-script1.html [ Failure ]
-  http/tests/security/xssAuditor/faux-script2.html [ Failure ]
-  http/tests/security/xssAuditor/faux-script3.html [ Failure ]
-  http/tests/security/xssAuditor/frameset-injection.html [ Failure ]
   http/tests/security/xssAuditor/full-block-post-from-iframe.html [ Failure ]
-  http/tests/security/xssAuditor/html5-import-CORS.html [ Failure ]
-  http/tests/security/xssAuditor/html5-import-list.html [ Failure ]
-  http/tests/security/xssAuditor/html5-import-safe.html [ Failure ]
-  http/tests/security/xssAuditor/html5-import.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-injection.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url-more-encoding.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode2.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode3.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url-url-encoded.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-javascript-url.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-onload-GBK-char.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-onload-in-svg-tag.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-srcdoc-property-blocked.html [ Failure ]
-  http/tests/security/xssAuditor/iframe-srcdoc.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-GBK-char.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-accented-char.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-non-ASCII-char-default-encoding.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-non-ASCII-char.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-non-ASCII-char2-default-encoding.html [ Failure ]
-  http/tests/security/xssAuditor/img-onerror-non-ASCII-char2.html [ Failure ]
-  http/tests/security/xssAuditor/img-tag-with-comma.html [ Failure ]
-  http/tests/security/xssAuditor/inline-event-HTML-entities.html [ Failure ]
-  http/tests/security/xssAuditor/link-onclick-ampersand.html [ Failure ]
-  http/tests/security/xssAuditor/link-onclick-control-char.html [ Failure ]
-  http/tests/security/xssAuditor/link-onclick-entities.html [ Failure ]
-  http/tests/security/xssAuditor/link-onclick-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/link-onclick.html [ Failure ]
-  http/tests/security/xssAuditor/malformed-HTML.html [ Failure ]
-  http/tests/security/xssAuditor/no-protection-script-tag.html [ Failure ]
-  http/tests/security/xssAuditor/open-attribute-body.html [ Failure ]
-  http/tests/security/xssAuditor/open-event-handler-iframe.html [ Failure ]
-  http/tests/security/xssAuditor/open-iframe-src-01.html [ Failure ]
-  http/tests/security/xssAuditor/open-iframe-src-02.html [ Failure ]
-  http/tests/security/xssAuditor/open-script-src-01.html [ Failure ]
-  http/tests/security/xssAuditor/open-script-src-02.html [ Failure ]
-  http/tests/security/xssAuditor/open-script-src-03.html [ Failure ]
-  http/tests/security/xssAuditor/open-script-src-04.html [ Failure ]
   http/tests/security/xssAuditor/post-from-iframe.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-comment-01.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-comment-02.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-comment-03.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-entity-01.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-entity-02.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-entity-03.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-long.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-noquotes-tab-slash-chars.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-noquotes.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-quote-01.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-quote-02.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape-quote-03.html [ Failure ]
-  http/tests/security/xssAuditor/property-escape.html [ Failure ]
-  http/tests/security/xssAuditor/property-inject.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode-16bit-unicode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-Big5-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-Big5-char2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-addslashes-backslash.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-addslashes-double-quote.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-addslashes-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-addslashes-single-quote.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-control-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-convoluted.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-entities.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-expression-follows.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-inside-svg-tag.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-inside-svg-tag2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-inside-svg-tag3.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-inside-svg-tag4.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-near-start.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-open-redirect.html [ Failure ]
   http/tests/security/xssAuditor/script-tag-post-control-char.html [ Failure ]
   http/tests/security/xssAuditor/script-tag-post-null-char.html [ Failure ]
   http/tests/security/xssAuditor/script-tag-post.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-redirect.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-replaced-with-questionmark.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-safe2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-safe3.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-src-redirect-safe.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode-surrogate-pair.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode3.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode4.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-16bit-unicode5.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-actual-comma.html [ Failure ]
   http/tests/security/xssAuditor/script-tag-with-callbacks.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-comma-01.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-comma-02.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-fancy-unicode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-injected-comment.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-injected-template-string.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-invalid-closing-tag.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-invalid-url-encoding.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-control-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-data-url.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-data-url2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-data-url3.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-double-quote.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-entities.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-no-quote.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-null-char.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-relative-scheme.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-same-host-with-query.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-same-host.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-unterminated-01.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-unterminated-02.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source-unterminated-03.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-source.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-three-times-url-encoded-16bit-unicode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment-U2028.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment2.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment3.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment4.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-comment5.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag-with-trailing-script-and-urlencode.html [ Failure ]
-  http/tests/security/xssAuditor/script-tag.html [ Failure ]
-  http/tests/security/xssAuditor/svg-script-tag.html [ Failure ]
   http/tests/security/xssAuditor/xss-filter-bypass-long-string.html [ Failure ]
   http/tests/security/xssAuditor/xss-protection-parsing-01.html [ Failure ]
   http/tests/serviceworker/appcache-ordering-main.html [ Failure ]
-  http/tests/serviceworker/chromium/sandboxed-iframe-navigator-serviceworker.html [ Failure ]
-  http/tests/w3c/webperf/approved/navigation-timing/html/test_timing_attributes_order.html [ Failure ]
-  http/tests/w3c/webperf/approved/navigation-timing/html/test_timing_reload.html [ Failure ]
-  http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_frame_initiator_type.html [ Failure ]
-  http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow-origin-null.html [ Failure ]
-  http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow.html [ Failure ]
-  http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied-without-wildcard.html [ Failure ]
-  http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied.html [ Failure ]
-  http/tests/xmlhttprequest/detaching-frame-2.html [ Failure ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-004.html [ Failure ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-005.html [ Failure Failure Crash Crash ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-007.html [ Failure Failure Failure Crash ]
-  http/tests/xmlhttprequest/uri-resolution-opera-open-008.html [ Failure ]
-  http/tests/xmlviewer/dumpAsText/frames.html [ Failure ]
-  http/tests/xsl/xslt-transform-with-javascript-disabled.html [ Failure ]
-  imported/web-platform-tests/html/browsers/browsing-the-web/history-traversal/popstate_event.html [ Failure Failure Timeout Timeout ]
-  imported/web-platform-tests/html/browsers/history/the-history-interface/004.html [ Failure ]
-  imported/web-platform-tests/html/infrastructure/terminology/plugins/text-plain.html [ Failure ]
-  imported/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm [ Failure ]
-  imported/web-platform-tests/html/semantics/embedded-content/the-object-element/object-attributes.html [ Failure ]
-  imported/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-001.html [ Failure Failure Crash Crash ]
-  inspector-protocol/page/frameScheduledNavigation.html [ Failure ]
-  media/auto-play-in-sandbox-with-allow-scripts.html [ Failure ]
-  scrollingcoordinator/non-fast-scrollable-region-nested.html [ Failure ]
-  svg/animations/accumulate-values-width-animation.html [ Failure ]
-  svg/animations/additive-from-to-width-animation.html [ Failure ]
-  svg/animations/additive-type-by-animation.html [ Failure ]
-  svg/animations/additive-values-width-animation.html [ Failure ]
-  svg/animations/animate-elem-02-t-drt.html [ Failure ]
-  svg/animations/animate-elem-03-t-drt.html [ Failure ]
-  svg/animations/animate-elem-04-t-drt.html [ Failure ]
-  svg/animations/animate-elem-05-t-drt.html [ Failure ]
-  svg/animations/animate-elem-06-t-drt.html [ Failure ]
-  svg/animations/animate-elem-07-t-drt.html [ Failure ]
-  svg/animations/animate-elem-08-t-drt.html [ Failure ]
-  svg/animations/animate-elem-09-t-drt.html [ Failure ]
-  svg/animations/animate-elem-10-t-drt.html [ Failure ]
-  svg/animations/animate-elem-11-t-drt.html [ Failure ]
-  svg/animations/animate-elem-12-t-drt.html [ Failure ]
-  svg/animations/animate-elem-13-t-drt.html [ Failure ]
-  svg/animations/animate-elem-14-t-drt.html [ Failure ]
-  svg/animations/animate-elem-15-t-drt.html [ Failure ]
-  svg/animations/animate-elem-16-t-drt.html [ Failure ]
-  svg/animations/animate-elem-17-t-drt.html [ Failure ]
-  svg/animations/animate-elem-18-t-drt.html [ Failure ]
-  svg/animations/animate-elem-19-t-drt.html [ Failure ]
-  svg/animations/animate-fill-freeze-with-repeatDur.html [ Failure ]
-  svg/animations/animate-no-matching-end-value.html [ Failure ]
-  svg/animations/animateMotion-fill-freeze.html [ Failure ]
-  svg/animations/animateMotion-fill-remove.html [ Failure ]
-  svg/animations/animateMotion-multiple.html [ Failure ]
-  svg/animations/animateMotion-still.html [ Failure ]
-  svg/animations/attributeTypes.html [ Failure ]
-  svg/animations/change-baseVal-while-animating-fill-freeze-2.html [ Failure ]
-  svg/animations/change-baseVal-while-animating-fill-freeze.html [ Failure ]
-  svg/animations/change-baseVal-while-animating-fill-remove-2.html [ Failure ]
-  svg/animations/change-baseVal-while-animating-fill-remove.html [ Failure ]
-  svg/animations/change-css-property-while-animating-fill-freeze.html [ Failure ]
-  svg/animations/change-css-property-while-animating-fill-remove.html [ Failure ]
-  svg/animations/change-target-while-animating-SVG-property.html [ Failure ]
-  svg/animations/cyclic-syncbase.html [ Failure ]
-  svg/animations/discard-on-discard.html [ Failure ]
-  svg/animations/force-use-shadow-tree-recreation-while-animating.html [ Failure ]
-  svg/animations/multiple-animations-ending.html [ Failure ]
-  svg/animations/multiple-animations-fill-freeze.html [ Failure ]
-  svg/animations/multiple-begin-additive-animation.html [ Failure ]
-  svg/animations/non-additive-type-by-animation.html [ Failure ]
-  svg/animations/non-additive-type-from-by-animation.html [ Failure ]
-  svg/animations/remove-animation-element-while-animation-is-running.html [ Failure ]
-  svg/animations/repeatn-remove-add-animation.html [ Failure ]
-  svg/animations/single-values-animation.html [ Failure ]
-  svg/animations/svg-animation-policy-none.html [ Failure ]
-  svg/animations/svg-animation-policy-once.html [ Failure ]
-  svg/animations/svglength-additive-by-1.html [ Failure ]
-  svg/animations/svglength-additive-by-2.html [ Failure ]
-  svg/animations/svglength-additive-by-3.html [ Failure ]
-  svg/animations/svglength-additive-by-4.html [ Failure ]
-  svg/animations/svglength-additive-by-5.html [ Failure ]
-  svg/animations/svglength-additive-by-6.html [ Failure ]
-  svg/animations/svglength-additive-from-by-1.html [ Failure ]
-  svg/animations/svglength-additive-from-by-2.html [ Failure ]
-  svg/animations/svglength-additive-from-by-3.html [ Failure ]
-  svg/animations/svglength-additive-from-by-4.html [ Failure ]
-  svg/as-iframe/svg-in-iframe.html [ Failure ]
-  svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure Failure Failure Failure ]
-  svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
-  svg/dom/SVGStyledElement-pendingResource-crash.html [ Failure ]
-  svg/dom/stylesheet-candidate-node-crash-main.html [ Failure ]
-  touchadjustment/iframe.html [ Failure ]
-  traversal/node-iterator-prototype.html [ Failure ]
-  virtual/pointerevent/fast/events/autoscroll-upwards-propagation-no-scroll-iframe.html [ Failure ]
-  virtual/pointerevent/fast/events/autoscroll-upwards-propagation-overflow-hidden-iframe-body.html [ Failure ]
-  virtual/pointerevent/fast/events/before-unload-return-bad-value.html [ Failure ]
-  virtual/pointerevent/fast/events/before-unload-return-value-from-listener.html [ Failure ]
-  virtual/pointerevent/fast/events/before-unload-returnValue.html [ Failure ]
-  virtual/pointerevent/fast/events/before-unload-with-subframes.html [ Failure ]
+  http/tests/serviceworker/clients-get.html [ Failure ]
   virtual/pointerevent/fast/events/drag-file-crash.html [ Failure ]
-  virtual/pointerevent/fast/events/drop-handler-should-not-stop-navigate.html [ Failure ]
-  virtual/pointerevent/fast/events/focusingUnloadedFrame.html [ Failure ]
   virtual/pointerevent/fast/events/frame-tab-focus.html [ Failure ]
-  virtual/pointerevent/fast/events/hit-test-counts.html [ Failure ]
-  virtual/pointerevent/fast/events/keydown-1.html [ Failure ]
-  virtual/pointerevent/fast/events/keypress-focus-change.html [ Failure ]
-  virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
-  virtual/pointerevent/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-  virtual/pointerevent/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-  virtual/pointerevent/fast/events/mouse-drag-from-frame.html [ Failure ]
-  virtual/pointerevent/fast/events/mousedown-in-subframe-scrollbar.html [ Failure ]
-  virtual/pointerevent/fast/events/mousemove-from-iframe-to-top-element.html [ Failure ]
-  virtual/pointerevent/fast/events/mouseover-button.html [ Failure ]
-  virtual/pointerevent/fast/events/mouseover-mouseout.html [ Failure ]
-  virtual/pointerevent/fast/events/mouseover-mouseout2.html [ Failure ]
-  virtual/pointerevent/fast/events/only-valid-drop-targets-receive-file-drop.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/compositor-touch-hit-rects-iframes.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/gesture/gesture-tap-active-state-iframe.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/gesture/gesture-tap-mouse-events-between-frames.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe.html [ Failure ]
-  virtual/pointerevent/fast/events/touch/touch-fractional-coordinates.html [ Failure ]
-  virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-crash-use-after-free-update-widget-positions.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects-iframes.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-active-state-iframe.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-hover-state-iframe.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-mouse-events-between-frames.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe.html [ Failure ]
-  virtual/scroll_customization/fast/events/touch/touch-fractional-coordinates.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-overflow-hidden.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-scrolling-no-overried-inherited-visibility-hidden.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-scrolling-no.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-scrolling-yes.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame-visibility-hidden-child.html [ Failure ]
-  virtual/scroll_customization/fast/scrolling/scrollable-area-frame.html [ Failure ]
-  virtual/smoothscrolling/fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Failure ]
-  virtual/smoothscrolling/fast/events/touch/gesture/gesture-tap-active-state-iframe.html [ Failure ]
-  virtual/smoothscrolling/fast/events/touch/gesture/gesture-tap-hover-state-iframe.html [ Failure ]
-  virtual/smoothscrolling/fast/events/touch/gesture/gesture-tap-mouse-events-between-frames.html [ Failure ]
-  virtual/smoothscrolling/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-upwards-propagation-no-scroll-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/autoscroll-upwards-propagation-overflow-hidden-iframe-body.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/before-unload-return-bad-value.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/before-unload-return-value-from-listener.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/before-unload-returnValue.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/before-unload-with-subframes.html [ Failure ]
+  virtual/pointerevent/fast/events/iframe-object-onload.html [ Failure ]
+  virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations.html [ Failure ]
   virtual/trustedeventsdefaultaction/fast/events/drag-file-crash.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/drop-handler-should-not-stop-navigate.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/focusingUnloadedFrame.html [ Failure ]
   virtual/trustedeventsdefaultaction/fast/events/frame-tab-focus.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/hit-test-counts.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/keypress-focus-change.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mousedown-in-subframe-scrollbar.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mousemove-from-iframe-to-top-element.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouseover-button.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouseover-mouseout.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/mouseover-mouseout2.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/only-valid-drop-targets-receive-file-drop.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/compositor-touch-hit-rects-iframes.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/gesture/gesture-tap-hover-state-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/gesture/gesture-tap-mouse-events-between-frames.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/touch-fractional-coordinates.html [ Failure ]
+  virtual/trustedeventsdefaultaction/fast/events/iframe-object-onload.html [ Failure ]
 
-# Results from the 2nd run:
+# Regressions: Unexpected image-only failures (5)
+  editing/execCommand/find-after-replace.html [ Failure ]
+  editing/pasteboard/copy-standalone-image.html [ Failure ]
+  editing/selection/4776665.html [ Failure ]
+  editing/selection/iframe.html [ Failure ]
 
-# Regressions: Unexpected text-only failures (5)
-  http/tests/navigation/back-to-redirect-with-frame.php [ Failure ]
-  http/tests/security/mixedContent/insecure-prefetch-in-main-frame.html [ Failure Failure Crash Failure ]
-  virtual/pointerevent/fast/events/touch/gesture/gesture-tap-hover-state-iframe.html [ Failure ]
-  virtual/trustedeventsdefaultaction/fast/events/touch/gesture/gesture-tap-active-state-iframe.html [ Failure ]
-
-# Regressions: Unexpected image-only failures (2)
-  fast/media/viewport-media-query.html [ Failure ]
-  imported/csswg-test/css-writing-modes-3/abs-pos-non-replaced-icb-vlr-009.xht [ Failure ]
-
-# Regressions: Unexpected crashes (2)
-  http/tests/navigation/javascriptlink-subframeload.html [ Crash ]
-  http/tests/security/referrer-policy-attribute-anchor-unsafe-url.html [ Crash ]
-
-# Regressions: Unexpected timeouts (4)
-  compositing/iframes/repaint-after-losing-scrollbars.html [ Timeout Failure Failure Timeout ]
-  http/tests/activedomobject/media.html [ Timeout ]
-  http/tests/navigation/anchor-frames-gbk.html [ Timeout Failure Failure Failure ]
-  http/tests/navigation/anchor-frames-shifting-focus.html [ Timeout Failure Crash Crash ]
-
-# Regressions: Unexpected image and text failures (1)
-  compositing/iframes/fixed-position-iframe.html [ Failure ]
-
-# Update on Feb-12-2016
-
-# Regressions: Unexpected image and text failures (5)
-  compositing/framesets/composited-frame-alignment.html [ Failure ]
-  css2.1/20110323/replaced-intrinsic-005.htm [ Failure ]
-  printing/iframe-print.html [ Failure ]
-  svg/as-object/embedded-svg-size-changes.html [ Failure ]
-  virtual/threaded/printing/iframe-print.html [ Failure ]
-
-# Regressions: Unexpected image-only failures (1)
-  fast/dom/HTMLImageElement/viewport-resize-after-load.html [ Failure ]
-
-# Regressions: Unexpected timeouts (7)
+# Regressions: Unexpected timeouts (47)
   bluetooth/disconnect-frame-detached/detach-gc.html [ Timeout ]
   bluetooth/disconnect-frame-detached/gc-detach.html [ Timeout ]
   bluetooth/disconnect-frame-detached/hide-detach.html [ Timeout ]
+  bluetooth/iframeRequestDevice.html [ Timeout ]
   bluetooth/requestDevice-sandboxed-iframe.html [ Timeout ]
-  http/tests/misc/onload-remove-iframe-crash-2.html [ Timeout ]
+  http/tests/appcache/fallback.html [ Timeout ]
+  http/tests/appcache/top-frame-2.html [ Timeout ]
+  http/tests/download/basic-ascii.html [ Timeout ]
+  http/tests/download/literal-utf-8.html [ Timeout ]
+  http/tests/fullscreen/fullscreenelement-different-origin.html [ Timeout ]
+  http/tests/fullscreen/fullscreenelement-same-origin.html [ Timeout ]
+  http/tests/history/back-to-post.html [ Timeout ]
+  http/tests/inspector/extensions-network-redirect.html [ Timeout ]
+  http/tests/misc/redirect-to-about-blank.html [ Timeout ]
+  http/tests/misc/window-open-then-write.html [ Timeout ]
+  http/tests/navigation/forward-to-fragment-fires-onload.html [ Timeout ]
+  http/tests/navigation/history-back-across-form-submission-to-fragment.html [ Timeout ]
   http/tests/navigation/redirect-on-back-updates-history-item.html [ Timeout ]
-  http/tests/security/opened-document-security-origin-resets-on-navigation.html [ Timeout ]
+  http/tests/navigation/response204.html [ Timeout ]
+  http/tests/navigation/scrollstate-after-http-equiv-refresh-fragment-identifier-2.html [ Timeout ]
+  http/tests/navigation/scrollstate-after-http-equiv-refresh-fragment-identifier.html [ Timeout ]
+  http/tests/navigation/scrollstate-after-http-equiv-refresh.html [ Timeout ]
+  http/tests/navigation/scrollstate-after-location-reload.html [ Timeout ]
+  http/tests/pointer-lock/iframe-sandboxed-allow-pointer-lock.html [ Timeout ]
+  http/tests/pointer-lock/iframe-sandboxed-nested-allow-pointer-lock.html [ Timeout ]
+  http/tests/pointer-lock/iframe-sandboxed-nested-disallow-then-allow-pointer-lock.html [ Timeout ]
+  http/tests/pointer-lock/iframe-sandboxed.html [ Timeout ]
+  http/tests/pointer-lock/pointerlockelement-different-origin.html [ Timeout ]
+  http/tests/pointer-lock/pointerlockelement-same-origin.html [ Timeout ]
+  http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html [ Timeout ]
+  http/tests/security/contentSecurityPolicy/1.1/child-src/frame-redirect-blocked.html [ Timeout ]
+  http/tests/security/contentSecurityPolicy/frame-src-redirect-blocked.html [ Timeout ]
+  http/tests/security/contentSecurityPolicy/redirect-does-not-match-paths.html [ Timeout ]
+  http/tests/security/mixedContent/nonwebby-scheme-in-iframe-allowed.https.html [ Timeout ]
+  http/tests/security/redirect-BLOCKED-to-localURL.html [ Timeout ]
+  virtual/android/fullscreen/exit-full-screen-iframe.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-fixed-pos-parent.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-frameset.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-iframe-allowed.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-iframe-legacy.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-iframe-not-allowed.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-iframe-zIndex.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-remove-ancestor-during-transition.html [ Timeout ]
+  virtual/android/fullscreen/full-screen-will-change.html [ Timeout ]
 
-# Regressions: Unexpected text-only failures (8)
-  compositing/layer-creation/fixed-position-out-of-view-scaled-iframe.html [ Failure ]
-  compositing/layer-creation/iframe-background-attachment-fixed.html [ Failure ]
-  fast/events/mouseover-mouseout.html [ Failure ]
-  http/tests/security/mixedContent/active-subresource-in-iframe-blocked.https.html [ Failure ]
-  http/tests/security/xss-DENIED-javascript-with-spaces.html [ Failure ]
+# Run 2
+
+# Regressions: Unexpected text-only failures (25)
+  fast/events/drag-file-crash.html [ Failure ]
+  fast/events/frame-tab-focus.html [ Failure ]
+  fast/forms/submit-to-url-fragment.html [ Failure ]
+  fast/history/history-length-append-subframe-with-hash.html [ Failure ]
+  fast/history/same-document-iframes-changing-fragment.html [ Failure ]
+  fast/history/same-document-iframes-changing-pushstate.html [ Failure ]
+  fast/loader/form-state-restore-with-frames.html [ Failure ]
+  fast/loader/main-document-url-for-non-http-loads.html [ Failure ]
+  fast/loader/scroll-position-restored-on-reload-at-load-event.html [ Failure ]
+  fast/loader/subframe-removes-itself.html [ Failure ]
+  http/tests/loading/307-after-303-after-post.html [ Failure ]
+  http/tests/loading/promote-img-in-viewport-priority.html [ Failure ]
+  http/tests/loading/redirect-with-no-location-crash.html [ Failure ]
+  http/tests/loading/slow-parsing-subframe.html [ Failure ]
+  http/tests/serviceworker/fetch-request-fallback.html [ Failure ]
+  http/tests/serviceworker/request-end-to-end.html [ Failure ]
+  http/tests/w3c/webperf/approved/navigation-timing/html/test_navigation_type_reload.html [ Failure ]
+  http/tests/w3c/webperf/approved/navigation-timing/html/test_timing_attributes_order.html [ Failure ]
+  http/tests/w3c/webperf/approved/navigation-timing/html/test_timing_reload.html [ Failure ]
+  http/tests/w3c/webperf/approved/navigation-timing/html/test_timing_server_redirect.html [ Failure ]
   http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_redirects.html [ Failure ]
-  virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-repaint-if-scrolling-composited-layers.html [ Failure ]
-  virtual/threaded/fast/scroll-behavior/smooth-scroll/fixed-background-in-iframe.html [ Failure ]
+  imported/web-platform-tests/html/browsers/history/the-history-interface/004.html [ Failure ]
+  imported/web-platform-tests/html/browsers/history/the-location-interface/security_location_0.sub.htm [ Failure ]
+  inspector-protocol/page/frameAttachedDetached.html [ Failure ]
+  inspector-protocol/page/frameStartedLoading.html [ Failure ]
 
+# Regressions: Unexpected image-only failures (1)
+  svg/custom/anchor-on-use.svg [ Failure ]
+
+# Regressions: Unexpected crashes (55)
+  fast/dom/null-document-window-open-crash.html [ Crash ]
+  fast/dom/window-domurl-crash.html [ Crash ]
+  fast/events/before-unload-return-bad-value.html [ Crash ]
+  fast/events/before-unload-return-value-from-listener.html [ Crash ]
+  fast/events/before-unload-returnValue.html [ Crash ]
+  fast/events/drop-handler-should-not-stop-navigate.html [ Crash ]
+  fast/events/focusingUnloadedFrame.html [ Crash ]
+  fast/events/isolated-worlds-override-keystate.html [ Crash ]
+  fast/events/main-world-does-not-override-keystate.html [ Crash ]
+  fast/events/onload-webkit-before-webcore.html [ Crash ]
+  fast/events/onloadFrameCrash.html [ Crash ]
+  fast/events/only-valid-drop-targets-receive-file-drop.html [ Crash ]
+  fast/events/popup-blocking-click-in-iframe.html [ Crash ]
+  fast/events/simulated-click-on-anchor-with-target-blank.html [ Crash ]
+  fast/frames/empty-frame-document.html [ Crash ]
+  fast/frames/iframe-plugin-load-remove-document-crash.html [ Crash ]
+  fast/html/marquee-clone-crash.html [ Crash ]
+  fast/innerHTML/innerHTML-iframe.html [ Crash ]
+  fast/loader/document-destruction-within-unload.html [ Crash ]
+  fast/loader/iframe-crash-on-missing-image.xhtml [ Crash ]
+  fast/loader/recursive-before-unload-crash.html [ Crash ]
+  fast/loader/reload-zero-byte-plugin.html [ Crash ]
+  fast/loader/stateobjects/pushstate-with-fragment-urls-and-hashchange.html [ Crash ]
+  fast/overflow/overflow-height-float-not-removed-crash.html [ Crash ]
+  fast/overflow/overflow-height-float-not-removed-crash2.html [ Crash ]
+  fast/overflow/overflow-height-float-not-removed-crash3.html [ Crash ]
+  fast/parser/empty-text-resource.html [ Crash ]
+  fast/repaint/table-hover-on-link.html [ Crash ]
+  fast/serviceworker/access-container-with-invalid-context.html [ Crash ]
+  fast/table/crash-splitColumn-2.html [ Crash ]
+  fast/table/giantCellspacing.html [ Crash ]
+  fast/xmlhttprequest/null-document-xmlhttprequest-open.html [ Crash ]
+  http/tests/loading/bad-server-subframe.html [ Crash ]
+  http/tests/loading/pdf-commit-load-callbacks.html [ Crash ]
+  http/tests/loading/redirect-methods.html [ Crash ]
+  http/tests/serviceworker/fetch-request-redirect.html [ Crash ]
+  imported/web-platform-tests/html/browsers/browsing-the-web/history-traversal/popstate_event.html [ Crash Failure Crash Failure ]
+  imported/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-default-name.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/004.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/005.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/006.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/007.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/008.html [ Crash ]
+  imported/web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/010.html [ Crash ]
+  imported/web-platform-tests/html/editing/focus/document-level-focus-apis/document-level-apis.html [ Crash ]
+  imported/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-document.html [ Crash ]
+  imported/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html [ Crash ]
+  imported/web-platform-tests/html/semantics/embedded-content/the-object-element/object-attributes.html [ Crash ]
+  imported/web-platform-tests/html/semantics/selectors/pseudo-classes/focus.html [ Crash ]
+  inspector-protocol/page/javascriptDialogEvents.html [ Crash ]
+  inspector/elements/styles-4/styles-source-lines-inline.html [ Crash ]
+  inspector/extensions/extensions-panel.html [ Crash ]
+  tables/mozilla/bugs/bug137388-1.html [ Crash ]
+  tables/mozilla/bugs/bug137388-2.html [ Crash ]
+
+# Regressions: Unexpected timeouts (21)
+  fast/forms/xss-auditor-doesnt-crash-on-post-submit.html [ Timeout ]
+  fast/history/history-replace-updates-current-item.html [ Timeout ]
+  fast/loader/onload-bad-scheme-for-frame.html [ Timeout ]
+  fast/loader/sandboxed-plugin-crash.html [ Timeout ]
+  fullscreen/exit-full-screen-iframe.html [ Timeout ]
+  fullscreen/full-screen-fixed-pos-parent.html [ Timeout ]
+  fullscreen/full-screen-frameset.html [ Timeout ]
+  fullscreen/full-screen-iframe-allowed.html [ Timeout ]
+  fullscreen/full-screen-iframe-legacy.html [ Timeout ]
+  fullscreen/full-screen-iframe-not-allowed.html [ Timeout ]
+  fullscreen/full-screen-iframe-zIndex.html [ Timeout ]
+  fullscreen/full-screen-remove-ancestor-during-transition.html [ Timeout ]
+  fullscreen/full-screen-will-change.html [ Timeout ]
+  http/tests/loading/bad-scheme-subframe.html [ Timeout ]
+  http/tests/loading/text-content-type-with-binary-extension.html [ Timeout ]
+  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect.html [ Timeout ]
+  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain.html [ Timeout ]
+  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_chain_allow_timing.html [ Timeout ]
+  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_redirect_with_timing_allow_origin.html [ Timeout ]
+  http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_same_origin_redirect.html [ Timeout ]
+  mhtml/multi_frames_contentid.mht [ Timeout ]
+
+# Regressions: Unexpected image and text failures (6)
+  fast/css/preserve-user-specified-zoom-level-on-reload.html [ Failure ]
+  http/tests/misc/location-replace-crossdomain.html [ Failure ]
+  svg/dynamic-updates/SVGAElement-dom-href-attr.html [ Failure ]
+  svg/dynamic-updates/SVGAElement-dom-target-attr.html [ Failure ]
+  svg/dynamic-updates/SVGAElement-svgdom-href-prop.html [ Failure ]
+  svg/dynamic-updates/SVGAElement-svgdom-target-prop.html [ Failure ]
+
+# Run 3
+
+# Regressions: Unexpected image-only failures (1)
+  compositing/gestures/gesture-tapHighlight-simple-navigate.html [ Failure ]
+
+# Regressions: Unexpected timeouts (1)
+  http/tests/security/w3c/cross-origin-objects.html [ Timeout Pass ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
index 3a4582c..def4867 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
@@ -78,13 +78,13 @@
 http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-insecure-origin.html [ Failure ]
 
 # https://crbug.com/584845 - bad message - RFH_NO_PROXY_TO_PARENT from OnDispatchLoad.
-http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-none-block.html [ Timeout ]
-http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-self-block.html [ Timeout ]
-http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-url-block.html [ Timeout ]
-http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-self-block.html [ Timeout ]
-http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-url-block.html [ Timeout ]
-http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-deny.html [ Timeout ]
-http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html [ Timeout ]
+http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-none-block.html [ Crash ]
+http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-self-block.html [ Crash ]
+http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-url-block.html [ Crash ]
+http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-self-block.html [ Crash ]
+http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-url-block.html [ Crash ]
+http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-deny.html [ Crash ]
+http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html [ Crash ]
 
 # https://crbug.com/582176 - InspectorTest.changeExecutionContext doesn't like OOPIFs.
 http/tests/inspector/console-cd-completions.html [ Failure ]
@@ -192,7 +192,7 @@
 http/tests/inspector/injected-script-for-origin.html [ Failure ]
 http/tests/inspector/resource-parameters.html [ Failure ]
 http/tests/local/absolute-url-strip-whitespace.html [ Timeout ]
-http/tests/local/serviceworker/fetch-request-body-file.html [ Failure Timeout ]
+http/tests/local/serviceworker/fetch-request-body-file.html [ Failure Crash ]
 http/tests/misc/webtiming-cross-origin-redirect.php [ Timeout ]
 http/tests/inspector-protocol/request-mixed-content-status-blockable.html [ Timeout ]
 http/tests/inspector-protocol/request-mixed-content-status-none.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/Mac10_11_Expectations b/third_party/WebKit/LayoutTests/Mac10_11_Expectations
index 52e9766..01fe6af 100644
--- a/third_party/WebKit/LayoutTests/Mac10_11_Expectations
+++ b/third_party/WebKit/LayoutTests/Mac10_11_Expectations
@@ -3,1091 +3,2376 @@
 # fixed, rebaselined, or moved to their own dedicated bugs and merged into
 # TestExpectations
 
-crbug.com/589709 [ Mac10.11 Retina ] compositing/gestures/gesture-tapHighlight-pixel-rotated-div.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/gestures/gesture-tapHighlight-pixel-transparent.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/gestures/gesture-tapHighlight-with-squashing.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/layer-creation/compositing-reason-removed.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/lots-of-img-layers-with-opacity.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/lots-of-img-layers.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/fixed-scroll-in-empty-root-layer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/text-color-change.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/updating-scrolling-container-and-content.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/overflow/updating-scrolling-container.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/shadows/shadow-drawing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/invalidate-when-leaving-squashed-layer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/invalidations-with-large-negative-margin.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/repaint-squashed-layer-in-rect.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/repaint-via-layout-offset.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/resize-squashing-layer-that-needs-full-repaint.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/squash-partial-repaint-inside-squashed-layer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] compositing/squashing/squashing-inside-preserve-3d-element.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/comments.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/containment.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/contextual_selectors.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/grouping.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/id_as_selector.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/basic/inheritance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/acid_test.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_bottom.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_bottom_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_bottom_width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_bottom_width_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_color_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_left.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_left_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_left_width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_left_width_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_right.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_right_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_right_width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_right_width_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_style_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_top.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_top_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_top_width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_top_width_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/border_width_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/clear.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/clear_float.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/float.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/float_elements_in_series.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/float_margin.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_bottom.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_bottom_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_left.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_left_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_right.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_right_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_top.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/margin_top_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_bottom.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_bottom_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_left.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_left_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_right.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_right_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_top.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/padding_top_inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/box_properties/width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/cascade/cascade_order.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/cascade/important.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/display.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/list_style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/list_style_image.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/list_style_position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/list_style_type.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/classification/white_space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background_attachment.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background_color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background_image.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background_position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/background_repeat.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/color_and_background/color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/conformance/forward_compatible_parsing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/font_properties/font_family.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/font_properties/font_size.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/font_properties/font_style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/font_properties/font_variant.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/font_properties/font_weight.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/canvas.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/floating_elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/height_of_lines.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/inline_elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/replaced_elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/formatting_model/vertical_formatting.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/pseudo/anchor.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/pseudo/firstletter.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/pseudo/firstline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/pseudo/multiple_pseudo_elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/pseudo/pseudo_elements_in_selectors.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/letter_spacing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/line_height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/text_align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/text_decoration.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/text_indent.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/text_transform.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/vertical_align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/text_properties/word_spacing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/units/color_units.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/units/length_units.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/units/percentage_units.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css1/units/urls.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/20110323/c543-txt-decor-000.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t050803-c14-classes-00-e.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t0509-c15-ids-01-e.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t0602-c13-inh-underlin-00-e.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t09-c5526c-display-00-e.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t0905-c414-flt-wrap-01-d-g.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t1503-c522-font-family-00-b.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css2.1/t1508-c527-font-06-b.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/flexbox/repaint-rtl-column.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-161.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-19b.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-23.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-24.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-25.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-64.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-68.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-69.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/html/css3-modsel-70.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-161.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-19b.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-23.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-24.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-25.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-64.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-68.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-69.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xhtml/css3-modsel-70.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-161.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-19b.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-23.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-24.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-25.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-64.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-68.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-69.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] css3/selectors3/xml/css3-modsel-70.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/deleting/5144139-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/deleting/merge-whitespace-pre.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/execCommand/format-block-with-trailing-br.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/input/caret-at-the-edge-of-input.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/input/ctrl-up-down.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/input/linux_ltr_composition_underline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/input/linux_rtl_composition_underline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/input/reveal-caret-of-multiline-input.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/inserting/4278698.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/inserting/paragraph-separator-03.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/pasteboard/4641033.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/pasteboard/drop-text-without-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/pasteboard/innerText-inline-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/pasteboard/pasting-tabs.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/3690703-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/3690703.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/3690719.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/4397952.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/4975120.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/5240265.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/caret-before-select.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/designmode-no-caret.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/extend-inside-transforms-backward.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/extend-inside-transforms-forward.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/linux_selection_color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/move-by-word-visually-crash-test-5.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/readonly-disabled-text-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/replaced-boundaries-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-across-readonly-input-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-across-readonly-input-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-across-readonly-input-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-across-readonly-input-4.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-across-readonly-input-5.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-box.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/select-element-paragraph-boundary.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/selection-button-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/selection/triple-click-in-pre.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/grammar-markers-hidpi.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/grammar-markers.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/inline-spelling-markers-hidpi-composited.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/inline-spelling-markers-hidpi.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/inline_spelling_markers.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/input-type-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/spelling/spelling-on-context-menu-key.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] editing/undo/redo-after-detach.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/backgrounds/background-inherit-color-bug.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/basic/011.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/basic/015.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/float/float-avoidance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/float/shrink-to-avoid-float-complexity.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/margin-collapse/103.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/block/positioning/inline-block-relposition.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/canvas/alpha.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/canvas/canvas-lost-gpu-context.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/canvas/canvas-text-space-characters.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css-generated-content/014.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/beforeSelectorOnCodeElement.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/color-correction-on-text-shadow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/continuationCrash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/device-aspect-ratio.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/empty-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/first-child-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/first-of-type-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/font-face-data-uri-invalid.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/fontfaceset-download-error.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/hover-subselector.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/input-search-padding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/last-child-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/last-of-type-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/line-height-font-order.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/line-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/margin-top-bottom-dynamic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/non-standard-checkbox-size.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/only-child-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/only-of-type-pseudo-class.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/outline-auto-empty-rects.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/shadow-multiple.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/text-overflow-input.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/universal-hover-quirk.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/css/word-space-extra.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/deprecated-flexbox/023.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/deprecated-flexbox/024.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dom/HTMLInputElement/input-image-alt-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dom/HTMLTableColElement/resize-table-using-col-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dom/adopt-attribute-crash.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dom/row-inner-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dynamic/008.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/dynamic/text-combine.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/autoscroll.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/context-no-deselect.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/iframe-object-onload.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/keyboard-scroll-by-page.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/menu-key-context-menu-document.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/menu-key-context-menu-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/menu-key-context-menu.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-cursor-no-mousemove.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-drag-from-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-event-buttons-attribute.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-relative-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-click-hyperlink.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-click.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-drag.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-event-fired.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-in-iframe.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/events/panScroll-nested-divs.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/files/file-in-input-display.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/basic-buttons.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/basic-inputs.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/blankbuttons.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-default-title.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-positioned.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-sizes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-style-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-table-styles.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button-text-transform.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button/button-align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button/button-cannot-be-nested.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/button/button-white-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/date-open-picker-with-f4-key.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/month-open-picker-with-f4-key.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/month-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/week-open-picker-with-f4-key.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/week-picker-appearance-step.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/calendar-picker/week-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/control-clip-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/control-clip.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/control-restrict-line-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/date/date-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/date/date-appearance-l10n.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/date/date-appearance-pseudo-elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/datetimelocal/datetimelocal-appearance-l10n.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/file/file-input-direction.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/file/file-input-disabled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/file/file-input-pressed-state.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/file/input-file-re-render.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/floating-textfield-relayout.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/form-element-geometry.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/formmove.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/formmove2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/formmove3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/image/002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/image/005.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/indeterminate.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-appearance-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-button-sizes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-first-letter.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-type-text-min-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/input-value.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/minWidthPercent.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/month/month-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/month/month-appearance-l10n.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/month/month-appearance-pseudo-elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/number/number-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/number/number-appearance-spinbutton-layer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/placeholder-position.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/plaintext-mode-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/disabled-search-input.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-abs-pos-cancel-button.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-appearance-basic.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-cancel-button-style-sharing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-display-none-cancel-button.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-popup-crasher.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-results-attribute.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-rtl.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-transformed.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-vertical-alignment.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/search-zoomed.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/search/searchfield-heights.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-empty.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-long.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-many.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-rtl.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-single-option.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-styled.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-tall.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-transform.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-zoom.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-appearance.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-ax.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-crash-on-cancel.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-event-order.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-key-operations.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-mouse-operations.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-multiline-title.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-nested-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-non-latin-update-from-element.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-open-partially-visible.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-position.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-resize-after-open.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-size.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/004.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/HTMLOptionElement_label01.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/HTMLOptionElement_label02.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/HTMLOptionElement_label03.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/HTMLOptionElement_label04.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/HTMLOptionElement_label05.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/basic-selects.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/disabled-select-change-index.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/hidden-listbox.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-appearance-separator.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-bidi-align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-scrollbar-incremental-load.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-width-change.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/listbox-with-display-none-option.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-clip.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-deselect-update.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-no-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-onchange-fired-with-key-up-down.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-option-wrap.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-restrict-line-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-style-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-update-text-popup.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/menulist-width-change.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/optgroup-rendering.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/option-script.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/option-strip-whitespace.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/option-text-clip.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/popup-with-display-none-optgroup.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-autofilled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-background-none.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-baseline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-block-background.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-change-listbox-size.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-change-listbox-to-popup.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-change-popup-to-listbox.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-dirty-parent-pref-widths.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-disabled-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-empty-option-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-initial-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-item-background-clip.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-list-box-with-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-listbox-multiple-no-focusring.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-multiple-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-overflow-scroll-inherited.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-overflow-scroll.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-selected.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-size-invalid.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/select/select-writing-direction-natural.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/stuff-on-my-optgroup.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/submit/submit-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/tabbing-input-iframe.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/targeted-frame-submission.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text-style-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-bkcolor.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-default-bkcolor.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-disabled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-focus.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-preventDefault.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-readonly.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-visibility.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-appearance-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-baseline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-disabled-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-double-click-selection-gap-bug.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-field-text-truncated.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-placeholder-paint-order.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-placeholder-visibility-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-placeholder-visibility-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-readonly-autoscroll.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-readonly-dimmed.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-spaces.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-text-double-click.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-text-drag-down.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-text-option-delete.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-text-scroll-left-on-blur.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/input-text-word-wrap.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/placeholder-pseudo-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/text-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/text-font-height-mismatch.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/textfield-outline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/text/textfield-overflow-by-value-update.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/basic-textareas-quirks.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/basic-textareas.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/linebox-overflow-in-textarea-padding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/onselect-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/placeholder-appearance-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/reset-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textAreaLineHeight.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-align.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-newline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-placeholder-paint-order.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-placeholder-pseudo-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-placeholder-visibility-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-placeholder-visibility-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-scroll-height.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-scrollbar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-scrolled-focus-ring.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-scrolled-mask.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-scrolled-type.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/textarea/textarea-setinnerhtml.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/time/time-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/time/time-appearance-pseudo-elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/week/week-appearance-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/forms/week/week-appearance-pseudo-elements.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/frames/cached-frame-counter.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/frames/iframe-scrolling-attribute.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/harness/sample-fail-mismatch-reftest.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/html/details-replace-summary-child.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/html/details-replace-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/html/keygen.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/html/listing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/12-55.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/182.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/2-dht.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/23-55.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/55.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/color-profile-background-clip-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/color-profile-munsell-adobe-to-srgb.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/color-profile-munsell-srgb-to-srgb.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/color-profile-svg-fill-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/huge-image-viewport-scale.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/image-click-scale-restore-zoomed-image.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/images/style-access-during-imageChanged-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/inline/justify-emphasis-inline-box.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/inline/positionedLifetime.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/inline/vertical-align-with-fallback-fonts.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/invalid/014.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/invalid/019.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/lists/003-vertical.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/lists/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/lists/dynamic-marker-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/loader/text-document-wrapping.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/005.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/007.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/clip-rects-fixed-ancestor.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/overflow-auto-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/overflow-x-y.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/overflow/scrollRevealButton.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/bad-xml-slash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/document-write-option.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/entity-comment-in-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/open-comment-in-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/xml-colon-entity.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/parser/xml-declaration-missing-ending-mark.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/change-text-content-and-background-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/control-clip.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/multi-layout-one-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/search-field-cancel.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/shadow-multiple.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/repaint/subtree-root-skipped.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/replaced-breaking-mixture.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/replaced-breaking.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-button.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-checkbox.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-menulist.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-radio.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-searchfield.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/replaced/width100percent-textfield.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/ruby/base-shorter-than-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/selectors/064.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/018.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/append-cells2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/border-collapsing/004-vertical.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/border-collapsing/004.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/invisible-cell-background.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/prepend-in-anonymous-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/remove-td-display-none.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/spanOverlapRepaint.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/table/text-field-baseline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/display-type-change.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/hackernews-comments.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/layout-after-append.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/list-item-above-dbcat.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/css-table-lots-of-text-many-cells.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/css-table-single-cell-lots-of-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/lots-of-text-many-cells.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/narrow-percentage-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/narrow-specified-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/nested-table-wrapping.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/nested-tables.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/single-cell-lots-of-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/single-percent-width-cell-lots-of-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/table-cell-inflation.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/table-for-layout.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/wide-percentage-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text-autosizing/tables/wide-specified-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/aat-morx.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/apply-start-width-after-skipped-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-kerning-and-ligatures.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-multiple-renderers.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-partial-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-pointtooffset-calls-cg.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-rtl-override-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-small-caps-punctuation-size.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/atsui-spacing-features.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/004.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/005.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/006.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/007.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/008.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/009.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/011.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/012.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/013.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/014.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/015.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/generic-family-changes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/basic/generic-family-reset.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/bidi-embedding-pop-and-push-same.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/bidi-img-alt-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/break-word.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/capitalize-boundaries.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/capitalize-empty-generated-string.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/capitalize-preserve-nbsp.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/caps-lock-indicator-disabled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/caps-lock-indicator-enabled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/cg-fallback-bolding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/cg-vs-atsui.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/complex-path-with-no-subpixel-fonts.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/complex-preferred-logical-widths.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/complex-synthetic-bold-space-width.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/complex-text-rtl-selection-repaint.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/custom-font-data-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/custom-font-data-crash2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/decorations-with-text-combine.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/delete-hard-break-character.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/drawBidiText.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/ellipsis-platform-font-change.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/embed-at-end-of-pre-wrap-line.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emoji-web-font.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emoticons.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emphasis-complex.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emphasis-ellipsis-complextext.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emphasis-vertical.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/emphasis.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/fake-italic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/fallback-for-custom-font.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/firstline/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/firstline/002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/firstline/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/fixed-pitch-control-characters.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-ascent-mac.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-cachekey.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-initial.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-kerning.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-size-adjust.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-smallcaps-layout.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-stretch-variant.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-stretch.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-variant-ligatures.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-weight-600.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-weight-variant.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/font-weight.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/format-control.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/glyph-reordering.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/in-rendered-text-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/alef-connected.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/arabic-vertical-offset.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-AN-after-L.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-AN-after-empty-run.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-CS-after-AN.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-L2-run-reordering.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-LDB-2-CSS.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-LDB-2-HTML.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-LDB-2-formatting-characters.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-control-chars-treated-as-ZWS.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-european-terminators.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-explicit-embedding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-ignored-for-first-child-inline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-innertext.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-layout-across-linebreak.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-linebreak-001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-linebreak-002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-linebreak-003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-listbox-atsui.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-listbox.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-menulist.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-mirror-he-ar.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-neutral-directionality-paragraph-start.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-neutral-run.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-override.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bidi-word-spacing-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/bold-bengali.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/complex-character-based-fallback.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/complex-joining-using-gpos.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/danda-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/draw-complex-text-from-to.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/hebrew-vowels.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/hindi-spacing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/hindi-whitespace.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/khmer-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/lang-glyph-cache-separation.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/menulist-width-rtl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/mixed-directionality-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/plane2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/pop-up-button-text-alignment-and-direction.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/rtl-caret.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/rtl-negative-letter-spacing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/rtl-white-space-pre-wrap.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/text-combine-image-test.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/text-spliced-font.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/thai-baht-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/thai-line-breaks.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/unicode-bidi-plaintext.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/vertical-text-glyph-test.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/wrap-CJK-001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/international/zerowidthjoiner.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justified-selection-at-edge.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justified-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justify-ideograph-complex.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justify-ideograph-leading-expansion.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justify-ideograph-simple.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/justify-padding-distribution.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/large-text-composed-char.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/letter-spacing-negative-opacity.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/line-breaks-after-white-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/line-breaks.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/line-initial-and-final-swashes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/midword-break-after-breakable-char.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/midword-break-before-surrogate-pair.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/midword-break-hang.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/monospace-width-cache.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/orientation-sideways.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/reset-emptyRun.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-hard-linebreak.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-multiple-runs.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-painted-separately.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-painting-hidpi.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-rect-line-height-too-big.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/selection-rect-line-height-too-small.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/shadow-no-blur.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/shadow-translucent-fill.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/shaping/same-script-different-lang.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/shaping/shaping-script-order.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/shaping/shaping-selection-rect.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/should-use-atsui.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/small-caps-turkish.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/soft-hyphen-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/soft-hyphen-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/softHyphen.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/stroking-decorations.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/stroking.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/sub-pixel/text-scaling-ltr.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/sub-pixel/text-scaling-pixel.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/text-letter-spacing.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/text-shadow-no-default-color.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/text-stroke-with-border.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/textIteratorNilRenderer.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/trailing-white-space-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/trailing-white-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/unicode-fallback-font.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/updateNewFont.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/vertical-rl-rtl-linebreak.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/vertical-surrogate-pair.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/wbr-in-pre-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/wbr-pre.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/wbr-styled.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/wbr.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/webfont-synthetic-bold.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/001.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/002.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/003.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/004.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/005.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/006.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/007.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/008.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/009.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/010.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/011.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/012.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/013.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/014.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/015.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/016.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/017.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/018.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/019.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/020.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/021.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/022.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/023.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/024.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/025.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/026.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/027.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/028.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/029.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/030.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/nbsp-mode-and-linewraps.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/normal-after-nowrap-breaking.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/nowrap-clear-float.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/pre-newline-box-test.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/pre-wrap-last-char.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/pre-wrap-line-test.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/pre-wrap-overflow-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/pre-wrap-spaces-after-newline.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/select-new-line-with-line-break-normal.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/whitespace/tab-character-basics.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/wide-zero-width-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/word-break-run-rounding.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/word-break-soft-hyphen.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/word-break.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/text/word-space.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/transforms/shadows.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/border-vertical-lr.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/english-lr-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-lr-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-lr-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-rl-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-rl-text.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-ruby-vertical-lr.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/japanese-ruby-vertical-rl.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/text-orientation-basic.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fast/writing-mode/vertical-baseline-alignment.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] fonts/monospace.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] harness-tests/mojo-helpers.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/filesystem/input-display.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/inspector/filesystem/async-callstack-filesystem.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/misc/timer-vs-loading.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/navigation/navigation-redirect-schedule-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/perf/large-inlined-script.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/webfont/font-display.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] http/tests/websocket/invalid-subprotocol-characters.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] ietestcenter/css3/text/textshadow-001.htm [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] ietestcenter/css3/text/textshadow-002.htm [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] ietestcenter/css3/text/textshadow-003.htm [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] ietestcenter/css3/text/textshadow-004.htm [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] ietestcenter/css3/text/textshadow-010.htm [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/line-height-126.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/line-height-129.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-percentage.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-auto.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-fixed.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-percentage.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/syntax/parsing/html5lib_template.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/html/syntax/parsing/html5lib_tests16.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] imported/web-platform-tests/webstorage/storage_local_setitem_quotaexceedederr.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector-protocol/heap-profiler/heap-samples-in-snapshot.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector-protocol/layout-fonts/ogham.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector-protocol/layout-fonts/tifinagh.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector-protocol/layout-fonts/unicode-range-combining-chars-fallback.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector/screen-orientation-override.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector/sources/debugger/debugger-completions-on-call-frame.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] inspector/tracing/compile-script.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] jquery/event.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] jquery/manipulation.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] media/controls-cast-do-not-fade-out.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] media/stable/video-object-fit-stable.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] media/track/track-cue-rendering-vertical.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] paint/theme/search-field-results-decoration-crash.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] plugins/embed-attributes-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] plugins/mouse-click-plugin-clears-selection.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] printing/webgl-oversized-printing.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/W3C-SVG-1.1/text-align-08-b.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/as-border-image/svg-as-border-image.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/as-object/embedded-svg-immediate-offsetWidth-query.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/as-object/embedded-svg-size-changes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/as-object/nested-embedded-svg-size-changes.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/batik/text/xmlSpace.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/css/text-gradient-shadow.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/css/text-shadow-multiple.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/dominant-baseline-hanging.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/getscreenctm-in-mixed-content.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/inline-svg-in-xhtml.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/object-sizing.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/custom/use-detach.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-appendItem.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-getItem.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-initialize.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-insertItemBefore.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-removeItem.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-replaceItem.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLengthList-xml-dom-modifications.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGLocatable-getCTM-svg-root.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/SVGStringList-basics.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/dom/css-transforms.xhtml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/hixie/mixed/003.xml [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/text/small-fonts-2.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/text/text-selection-fonts-01-t.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] svg/text/text-with-geometric-precision.svg [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/45621.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug10269-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug10296-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug1055-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug1188.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug13105.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug13118.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug1318.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug138725.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug139524-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug157890.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug18359.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug194024.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug20579.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug22019.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug23235.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug2479-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug2479-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug2479-4.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug26178.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug28928.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug29326.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug30559.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug30692.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug33855.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug39209.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug4382.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug4429.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug44505.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug4527.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug46368-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug46368-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug51037.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug51727.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug52505.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug52506.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug59354.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug60749.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug68912.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug7112-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug7112-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug7121-1.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug7342.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug83786.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug8950.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/bugs/bug96334.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/collapsing_borders/bug41262-3.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/collapsing_borders/bug41262-4.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/core/margins.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/dom/tableDom.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_index.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_layers-opacity.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_position-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table-cell.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table-column-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table-column.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table-row-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table-row.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/marvin/backgr_simple-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/other/move_row.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla/other/test6.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug1128.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug1725.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug21518.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug22122.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/bugs/bug58402-2.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-cell.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-column-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-column.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-quirks.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-row.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_layers-hide.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_layers-show.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-cell.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-column-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-column.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-row-group.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-row.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] transforms/2d/zoom-menulist.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/video-controls-timeline.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/video-scrolled-iframe.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/android/fullscreen/video-specified-size.html [ Missing ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/display_list_2d_canvas/fast/canvas/alpha.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/display_list_2d_canvas/fast/canvas/canvas-text-space-characters.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/gpu/fast/canvas/alpha.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/gpu/fast/canvas/canvas-blend-image.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/gpu/fast/canvas/canvas-blend-solid.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/gpu/fast/canvas/canvas-text-space-characters.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/autoscroll.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/context-no-deselect.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/iframe-object-onload.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/keyboard-scroll-by-page.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/menu-key-context-menu-document.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/menu-key-context-menu.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-cursor-no-mousemove.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-drag-from-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-event-buttons-attribute.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-relative-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-click-hyperlink.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-click.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-drag.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-event-fired.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-in-iframe.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/pointerevent/fast/events/panScroll-nested-divs.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/rootlayerscrolls/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/smoothscrolling/fast/events/touch/gesture/gesture-tap-frame-scrolled.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/threaded/fast/idle-callback/idle_periods.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/threaded/fast/scroll-behavior/smooth-scroll/keyboard-scroll.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/threaded/printing/setPrinting.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/threaded/printing/width-overflow.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/autoscroll.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/context-no-deselect.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/iframe-object-onload.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/keyboard-scroll-by-page.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-document.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-cursor-no-mousemove.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-event-buttons-attribute.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-relative-position.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click-hyperlink.html [ Failure ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-drag.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-event-fired.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-in-iframe.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
-crbug.com/589709 [ Mac10.11 Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-div.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] compositing/gestures/gesture-tapHighlight-pixel-transparent.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/gestures/gesture-tapHighlight-with-squashing.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] compositing/layer-creation/compositing-reason-removed.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/lots-of-img-layers-with-opacity.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] compositing/lots-of-img-layers.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/fixed-scroll-in-empty-root-layer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/text-color-change.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/updating-scrolling-container-and-content.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/overflow/updating-scrolling-container.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/shadows/shadow-drawing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/invalidate-when-leaving-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/invalidations-with-large-negative-margin.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/repaint-squashed-layer-in-rect.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/repaint-via-layout-offset.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/resize-squashing-layer-that-needs-full-repaint.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/squash-partial-repaint-inside-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] compositing/squashing/squashing-inside-preserve-3d-element.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/comments.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/containment.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/contextual_selectors.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/grouping.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/id_as_selector.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/basic/inheritance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/acid_test.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_bottom.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_bottom_width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_bottom_width_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_color_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_left.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_left_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_left_width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_left_width_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_right.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_right_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_right_width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_right_width_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_style_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_top.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_top_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_top_width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_top_width_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/border_width_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/clear.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/clear_float.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/float.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/float_elements_in_series.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/float_margin.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_bottom.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_left.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_left_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_right.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_right_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_top.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/margin_top_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_bottom.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_left.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_left_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_right.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_right_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_top.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/padding_top_inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/box_properties/width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/cascade/cascade_order.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/cascade/important.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/display.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/list_style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/list_style_image.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/list_style_position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/list_style_type.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/classification/white_space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background_attachment.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background_color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background_image.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background_position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/background_repeat.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/color_and_background/color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/conformance/forward_compatible_parsing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/font_properties/font_family.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/font_properties/font_size.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/font_properties/font_style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/font_properties/font_variant.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/font_properties/font_weight.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/canvas.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/floating_elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/height_of_lines.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/inline_elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/replaced_elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/formatting_model/vertical_formatting.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/pseudo/anchor.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/pseudo/firstletter.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/pseudo/firstline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/pseudo/multiple_pseudo_elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/pseudo/pseudo_elements_in_selectors.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/letter_spacing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/line_height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/text_align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/text_decoration.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/text_indent.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/text_transform.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/vertical_align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/text_properties/word_spacing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/units/color_units.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/units/length_units.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/units/percentage_units.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css1/units/urls.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/20110323/c543-txt-decor-000.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t050803-c14-classes-00-e.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t0509-c15-ids-01-e.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t0602-c13-inh-underlin-00-e.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t09-c5526c-display-00-e.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t0905-c414-flt-wrap-01-d-g.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t1503-c522-font-family-00-b.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css2.1/t1508-c527-font-06-b.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/flexbox/repaint-rtl-column.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-161.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-19b.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-23.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-24.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-25.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-64.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-68.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-69.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/html/css3-modsel-70.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-161.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-19b.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-23.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-24.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-25.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-64.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-68.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-69.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xhtml/css3-modsel-70.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-161.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-19b.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-23.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-24.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-25.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-64.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-68.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-69.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] css3/selectors3/xml/css3-modsel-70.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/deleting/5144139-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/deleting/merge-whitespace-pre.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/execCommand/format-block-with-trailing-br.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/input/caret-at-the-edge-of-input.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/input/ctrl-up-down.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/input/linux_ltr_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/input/linux_rtl_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/input/reveal-caret-of-multiline-input.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/inserting/4278698.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/inserting/paragraph-separator-03.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/pasteboard/4641033.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/pasteboard/drop-text-without-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/pasteboard/innerText-inline-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/pasteboard/pasting-tabs.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/3690703-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/3690703.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/3690719.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/4397952.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/4975120.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/5240265.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/caret-before-select.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/designmode-no-caret.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/extend-inside-transforms-backward.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/extend-inside-transforms-forward.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/linux_selection_color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/move-by-word-visually-crash-test-5.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/readonly-disabled-text-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/replaced-boundaries-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-across-readonly-input-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-across-readonly-input-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-across-readonly-input-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-across-readonly-input-4.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-across-readonly-input-5.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-box.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/select-element-paragraph-boundary.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/selection-button-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/selection/triple-click-in-pre.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/grammar-markers-hidpi.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/grammar-markers.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/inline-spelling-markers-hidpi-composited.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/inline-spelling-markers-hidpi.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/inline_spelling_markers.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/input-type-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/spelling/spelling-on-context-menu-key.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] editing/undo/redo-after-detach.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/backgrounds/background-inherit-color-bug.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/basic/011.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/basic/015.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/float/float-avoidance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/float/shrink-to-avoid-float-complexity.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/margin-collapse/103.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/block/positioning/inline-block-relposition.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/canvas/canvas-lost-gpu-context.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css-generated-content/014.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/beforeSelectorOnCodeElement.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/color-correction-on-text-shadow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/continuationCrash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/device-aspect-ratio.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/css/empty-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/first-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/first-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/font-face-data-uri-invalid.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/fontfaceset-download-error.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/hover-subselector.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/input-search-padding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/last-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/last-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/line-height-font-order.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/line-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/margin-top-bottom-dynamic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/non-standard-checkbox-size.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/only-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/only-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/outline-auto-empty-rects.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/shadow-multiple.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/text-overflow-input.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/universal-hover-quirk.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/css/word-space-extra.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/deprecated-flexbox/023.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/deprecated-flexbox/024.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dom/HTMLInputElement/input-image-alt-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dom/HTMLTableColElement/resize-table-using-col-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dom/adopt-attribute-crash.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dom/row-inner-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dynamic/008.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/dynamic/text-combine.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/context-no-deselect.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/iframe-object-onload.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/keyboard-scroll-by-page.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-cursor-no-mousemove.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-drag-from-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-event-buttons-attribute.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-relative-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/files/file-in-input-display.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/basic-buttons.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/basic-inputs.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/blankbuttons.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-default-title.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-positioned.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-sizes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-style-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-table-styles.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button-text-transform.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button/button-align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button/button-cannot-be-nested.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/button/button-white-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/date-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/month-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/month-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/week-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/week-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/calendar-picker/week-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/control-clip-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/control-clip.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/control-restrict-line-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/date/date-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/date/date-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/date/date-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/datetimelocal/datetimelocal-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/file/file-input-direction.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/file/file-input-disabled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/file/file-input-pressed-state.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/file/input-file-re-render.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/floating-textfield-relayout.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/form-element-geometry.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/formmove.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/formmove2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/formmove3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/image/002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/image/005.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/indeterminate.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-appearance-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-button-sizes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-first-letter.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-type-text-min-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/input-value.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/minWidthPercent.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/month/month-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/month/month-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/month/month-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/number/number-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/number/number-appearance-spinbutton-layer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/placeholder-position.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/plaintext-mode-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/disabled-search-input.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-abs-pos-cancel-button.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-appearance-basic.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-cancel-button-style-sharing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-display-none-cancel-button.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-popup-crasher.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-results-attribute.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-rtl.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-transformed.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-vertical-alignment.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/search-zoomed.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/search/searchfield-heights.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-empty.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-long.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-many.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-rtl.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-single-option.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-styled.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-tall.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-transform.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-zoom.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-appearance.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-ax.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-crash-on-cancel.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-event-order.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-key-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-mouse-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-multiline-title.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-nested-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-non-latin-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-open-partially-visible.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-position.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-resize-after-open.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-size.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/004.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/HTMLOptionElement_label01.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/HTMLOptionElement_label02.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/HTMLOptionElement_label03.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/HTMLOptionElement_label04.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/HTMLOptionElement_label05.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/basic-selects.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/disabled-select-change-index.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/hidden-listbox.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-appearance-separator.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-bidi-align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-scrollbar-incremental-load.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-width-change.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/listbox-with-display-none-option.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-clip.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-deselect-update.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-no-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-onchange-fired-with-key-up-down.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-option-wrap.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-restrict-line-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-style-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-update-text-popup.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/menulist-width-change.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/optgroup-rendering.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/option-script.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/option-strip-whitespace.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/option-text-clip.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/popup-with-display-none-optgroup.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-autofilled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-background-none.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-baseline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-block-background.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-change-listbox-size.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-change-listbox-to-popup.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-change-popup-to-listbox.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-dirty-parent-pref-widths.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-disabled-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-empty-option-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-initial-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-item-background-clip.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-list-box-with-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-listbox-multiple-no-focusring.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-multiple-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-overflow-scroll-inherited.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-overflow-scroll.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-selected.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-size-invalid.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/select/select-writing-direction-natural.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/stuff-on-my-optgroup.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/submit/submit-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/tabbing-input-iframe.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/targeted-frame-submission.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text-style-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-bkcolor.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-default-bkcolor.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-disabled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-focus.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-preventDefault.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-readonly.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-visibility.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-appearance-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-baseline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-disabled-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-double-click-selection-gap-bug.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-field-text-truncated.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-placeholder-paint-order.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-placeholder-visibility-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-placeholder-visibility-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-readonly-autoscroll.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-readonly-dimmed.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-spaces.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-text-double-click.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-text-drag-down.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-text-option-delete.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-text-scroll-left-on-blur.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/input-text-word-wrap.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/placeholder-pseudo-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/text-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/text-font-height-mismatch.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/textfield-outline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/text/textfield-overflow-by-value-update.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/basic-textareas-quirks.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/basic-textareas.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/linebox-overflow-in-textarea-padding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/onselect-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/placeholder-appearance-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/reset-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textAreaLineHeight.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-align.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-newline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-placeholder-paint-order.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-placeholder-pseudo-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-placeholder-visibility-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-placeholder-visibility-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-scroll-height.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-scrollbar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-scrolled-focus-ring.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-scrolled-mask.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-scrolled-type.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/textarea/textarea-setinnerhtml.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/time/time-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/time/time-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/week/week-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/forms/week/week-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/frames/cached-frame-counter.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/frames/iframe-scrolling-attribute.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/harness/sample-fail-mismatch-reftest.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/html/details-replace-summary-child.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/html/details-replace-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/html/keygen.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/html/listing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/12-55.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/182.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/2-dht.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/23-55.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/55.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/color-profile-background-clip-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/color-profile-munsell-adobe-to-srgb.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/color-profile-munsell-srgb-to-srgb.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/color-profile-svg-fill-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/huge-image-viewport-scale.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/images/image-click-scale-restore-zoomed-image.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/images/style-access-during-imageChanged-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/inline/justify-emphasis-inline-box.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/inline/positionedLifetime.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/inline/vertical-align-with-fallback-fonts.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/invalid/014.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/invalid/019.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/lists/003-vertical.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/lists/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/lists/dynamic-marker-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/loader/text-document-wrapping.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/005.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/007.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/clip-rects-fixed-ancestor.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/overflow-auto-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/overflow-x-y.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/overflow/scrollRevealButton.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/bad-xml-slash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/document-write-option.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/entity-comment-in-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/open-comment-in-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/xml-colon-entity.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/parser/xml-declaration-missing-ending-mark.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/change-text-content-and-background-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/control-clip.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/multi-layout-one-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/search-field-cancel.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/shadow-multiple.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/repaint/subtree-root-skipped.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/replaced-breaking-mixture.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/replaced-breaking.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-button.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-checkbox.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-menulist.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-radio.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-searchfield.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/replaced/width100percent-textfield.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/ruby/base-shorter-than-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/selectors/064.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/018.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/append-cells2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/border-collapsing/004-vertical.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/border-collapsing/004.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/invisible-cell-background.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/prepend-in-anonymous-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/remove-td-display-none.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/spanOverlapRepaint.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/table/text-field-baseline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/display-type-change.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/hackernews-comments.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/layout-after-append.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/list-item-above-dbcat.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/css-table-lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/css-table-single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/narrow-percentage-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/narrow-specified-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/nested-table-wrapping.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/nested-tables.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/single-percent-width-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/table-cell-inflation.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/table-for-layout.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/wide-percentage-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text-autosizing/tables/wide-specified-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/aat-morx.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/apply-start-width-after-skipped-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-kerning-and-ligatures.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-multiple-renderers.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-partial-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-pointtooffset-calls-cg.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-rtl-override-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-small-caps-punctuation-size.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/atsui-spacing-features.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/004.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/005.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/006.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/007.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/008.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/009.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/011.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/012.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/013.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/014.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/015.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/generic-family-changes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/basic/generic-family-reset.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/bidi-embedding-pop-and-push-same.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/bidi-img-alt-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/break-word.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/capitalize-boundaries.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/capitalize-empty-generated-string.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/capitalize-preserve-nbsp.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/caps-lock-indicator-disabled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/caps-lock-indicator-enabled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/cg-fallback-bolding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/cg-vs-atsui.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/complex-path-with-no-subpixel-fonts.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/complex-preferred-logical-widths.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/complex-synthetic-bold-space-width.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/complex-text-rtl-selection-repaint.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/custom-font-data-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/custom-font-data-crash2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/decorations-with-text-combine.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/delete-hard-break-character.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/drawBidiText.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/ellipsis-platform-font-change.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/embed-at-end-of-pre-wrap-line.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emoji-web-font.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emoticons.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emphasis-complex.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emphasis-ellipsis-complextext.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emphasis-vertical.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/emphasis.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/fake-italic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/fallback-for-custom-font.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/firstline/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/firstline/002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/firstline/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/fixed-pitch-control-characters.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-ascent-mac.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-cachekey.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-initial.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-kerning.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-size-adjust.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-smallcaps-layout.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-stretch-variant.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-stretch.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-variant-ligatures.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-weight-600.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-weight-variant.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/font-weight.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/format-control.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/glyph-reordering.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/in-rendered-text-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/alef-connected.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/arabic-vertical-offset.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-AN-after-L.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-AN-after-empty-run.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-CS-after-AN.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-L2-run-reordering.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-LDB-2-CSS.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-LDB-2-HTML.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-LDB-2-formatting-characters.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-control-chars-treated-as-ZWS.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-european-terminators.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-explicit-embedding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-ignored-for-first-child-inline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-innertext.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-layout-across-linebreak.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-linebreak-001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-linebreak-002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-linebreak-003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-listbox-atsui.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-listbox.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-menulist.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-mirror-he-ar.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-neutral-directionality-paragraph-start.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-neutral-run.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-override.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bidi-word-spacing-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/bold-bengali.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/complex-character-based-fallback.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/complex-joining-using-gpos.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/danda-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/draw-complex-text-from-to.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/hebrew-vowels.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/hindi-spacing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/hindi-whitespace.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/khmer-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/lang-glyph-cache-separation.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/menulist-width-rtl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/mixed-directionality-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/plane2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/pop-up-button-text-alignment-and-direction.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/rtl-caret.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/rtl-negative-letter-spacing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/rtl-white-space-pre-wrap.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/text-combine-image-test.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/text-spliced-font.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/thai-baht-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/thai-line-breaks.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/unicode-bidi-plaintext.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/vertical-text-glyph-test.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/wrap-CJK-001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/international/zerowidthjoiner.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justified-selection-at-edge.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justified-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justify-ideograph-complex.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justify-ideograph-leading-expansion.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justify-ideograph-simple.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/justify-padding-distribution.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/large-text-composed-char.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/letter-spacing-negative-opacity.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/line-breaks-after-white-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/line-breaks.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/line-initial-and-final-swashes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/midword-break-after-breakable-char.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/midword-break-before-surrogate-pair.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/midword-break-hang.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/monospace-width-cache.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/orientation-sideways.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/reset-emptyRun.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-hard-linebreak.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-multiple-runs.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-painted-separately.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-painting-hidpi.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-rect-line-height-too-big.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/selection-rect-line-height-too-small.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/shadow-no-blur.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/shadow-translucent-fill.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/shaping/same-script-different-lang.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/shaping/shaping-script-order.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/shaping/shaping-selection-rect.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/should-use-atsui.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/small-caps-turkish.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/soft-hyphen-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/soft-hyphen-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/softHyphen.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/stroking-decorations.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/stroking.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/sub-pixel/text-scaling-ltr.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/sub-pixel/text-scaling-pixel.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] fast/text/text-letter-spacing.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/text-shadow-no-default-color.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/text-stroke-with-border.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/textIteratorNilRenderer.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/trailing-white-space-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/trailing-white-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/unicode-fallback-font.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/updateNewFont.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/vertical-rl-rtl-linebreak.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/vertical-surrogate-pair.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/wbr-in-pre-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/wbr-pre.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/wbr-styled.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/wbr.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/webfont-synthetic-bold.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/001.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/002.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/003.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/004.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/005.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/006.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/007.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/008.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/009.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/010.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/011.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/012.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/013.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/014.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/015.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/016.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/017.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/018.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/019.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/020.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/021.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/022.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/023.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/024.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/025.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/026.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/027.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/028.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/029.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/030.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/nbsp-mode-and-linewraps.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/normal-after-nowrap-breaking.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/nowrap-clear-float.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/pre-newline-box-test.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/pre-wrap-last-char.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/pre-wrap-line-test.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/pre-wrap-overflow-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/pre-wrap-spaces-after-newline.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/select-new-line-with-line-break-normal.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/whitespace/tab-character-basics.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/wide-zero-width-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/word-break-run-rounding.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/word-break-soft-hyphen.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/word-break.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/text/word-space.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/transforms/shadows.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/border-vertical-lr.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/english-lr-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-lr-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-lr-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-rl-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-rl-text.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-ruby-vertical-lr.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/japanese-ruby-vertical-rl.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/text-orientation-basic.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fast/writing-mode/vertical-baseline-alignment.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] fonts/monospace.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] harness-tests/mojo-helpers.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] http/tests/filesystem/input-display.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] http/tests/inspector/filesystem/async-callstack-filesystem.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] http/tests/misc/timer-vs-loading.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] http/tests/navigation/navigation-redirect-schedule-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] http/tests/perf/large-inlined-script.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] http/tests/webfont/font-display.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] http/tests/websocket/invalid-subprotocol-characters.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] ietestcenter/css3/text/textshadow-001.htm [ Failure ]
+crbug.com/589709 [ Mac10.11 ] ietestcenter/css3/text/textshadow-002.htm [ Failure ]
+crbug.com/589709 [ Mac10.11 ] ietestcenter/css3/text/textshadow-003.htm [ Failure ]
+crbug.com/589709 [ Mac10.11 ] ietestcenter/css3/text/textshadow-004.htm [ Failure ]
+crbug.com/589709 [ Mac10.11 ] ietestcenter/css3/text/textshadow-010.htm [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/line-height-126.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/line-height-129.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ]
+crbug.com/589709 [ Mac10.11 Release ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-percentage.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-auto.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-fixed.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-percentage.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/syntax/parsing/html5lib_template.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/html/syntax/parsing/html5lib_tests16.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] imported/web-platform-tests/webstorage/storage_local_setitem_quotaexceedederr.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] inspector-protocol/heap-profiler/heap-samples-in-snapshot.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] inspector-protocol/layout-fonts/ogham.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] inspector-protocol/layout-fonts/tifinagh.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] inspector-protocol/layout-fonts/unicode-range-combining-chars-fallback.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] inspector/screen-orientation-override.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] inspector/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] inspector/sources/debugger/debugger-completions-on-call-frame.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] inspector/tracing/compile-script.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] jquery/event.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] jquery/manipulation.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] media/controls-cast-do-not-fade-out.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] media/stable/video-object-fit-stable.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] media/track/track-cue-rendering-vertical.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] paint/theme/search-field-results-decoration-crash.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] plugins/embed-attributes-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] plugins/mouse-click-plugin-clears-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] printing/webgl-oversized-printing.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/W3C-SVG-1.1/text-align-08-b.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/as-border-image/svg-as-border-image.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/as-object/embedded-svg-immediate-offsetWidth-query.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/as-object/embedded-svg-size-changes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/as-object/nested-embedded-svg-size-changes.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/batik/text/xmlSpace.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/css/text-gradient-shadow.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/css/text-shadow-multiple.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/dominant-baseline-hanging.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/getscreenctm-in-mixed-content.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/inline-svg-in-xhtml.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/object-sizing.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/custom/use-detach.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-appendItem.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-getItem.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-initialize.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-insertItemBefore.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-removeItem.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-replaceItem.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLengthList-xml-dom-modifications.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGLocatable-getCTM-svg-root.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/SVGStringList-basics.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/dom/css-transforms.xhtml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/hixie/mixed/003.xml [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/text/small-fonts-2.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/text/text-selection-fonts-01-t.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] svg/text/text-with-geometric-precision.svg [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/45621.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug10269-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug10296-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug1055-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug1188.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug13105.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug13118.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug1318.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug138725.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug139524-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug157890.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug18359.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug194024.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug20579.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug22019.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug23235.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug2479-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug2479-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug2479-4.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug26178.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug28928.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug29326.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug30559.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug30692.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug33855.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug39209.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug4382.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug4429.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug44505.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug4527.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug46368-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug46368-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug51037.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug51727.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug52505.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug52506.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug59354.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug60749.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug68912.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug7112-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug7112-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug7121-1.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug7342.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug83786.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug8950.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/bugs/bug96334.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/collapsing_borders/bug41262-3.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/collapsing_borders/bug41262-4.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/core/margins.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/dom/tableDom.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_index.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_layers-opacity.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_position-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table-cell.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table-column-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table-column.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table-row-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table-row.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/marvin/backgr_simple-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/other/move_row.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla/other/test6.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug1128.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug1725.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug21518.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug22122.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/bugs/bug58402-2.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-cell.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-column-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-column.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-quirks.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table-row.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_border-table.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_layers-hide.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_layers-show.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_position-table-cell.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_position-table-column-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_position-table-column.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_position-table-row-group.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] tables/mozilla_expected_failures/marvin/backgr_position-table-row.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] transforms/2d/zoom-menulist.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/video-controls-timeline.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/video-scrolled-iframe.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] virtual/android/fullscreen/video-specified-size.html [ Missing ]
+crbug.com/589709 [ Mac10.11 ] virtual/display_list_2d_canvas/fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/display_list_2d_canvas/fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/gpu/fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/gpu/fast/canvas/canvas-blend-image.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/gpu/fast/canvas/canvas-blend-solid.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/gpu/fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/context-no-deselect.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/iframe-object-onload.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/keyboard-scroll-by-page.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-cursor-no-mousemove.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-drag-from-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-event-buttons-attribute.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-relative-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/pointerevent/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/rootlayerscrolls/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/smoothscrolling/fast/events/touch/gesture/gesture-tap-frame-scrolled.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/threaded/fast/idle-callback/idle_periods.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/threaded/fast/scroll-behavior/smooth-scroll/keyboard-scroll.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/threaded/printing/setPrinting.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/threaded/printing/width-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/context-no-deselect.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/iframe-object-onload.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/keyboard-scroll-by-page.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-cursor-no-mousemove.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-cursor-style-change-iframe.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-double-triple-click-should-not-select-next-node-for-user-select-none.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-drag-from-frame.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-event-buttons-attribute.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-relative-position.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/mouse-wheel-main-frame-scroll.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs.html [ Timeout ]
+
+crbug.com/589709 [ Mac10.11 Debug ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Failure ]
+crbug.com/589709 [ Mac10.11 Debug ] animations/interpolation/transform-interpolation.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] editing/selection/caret-at-bidi-boundary.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] editing/selection/move-by-word-visually-multi-space.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] editing/spelling/spellcheck-editable-on-focus.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] fast/overflow/lots-of-sibling-inline-boxes.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] inspector/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] inspector/sources/debugger-breakpoints/dom-breakpoints.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] inspector/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] inspector/sources/debugger-step/debugger-step-into-async2.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] jquery/traversing.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] storage/indexeddb/mozilla/test_objectStore_openKeyCursor.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] storage/indexeddb/objectstore-cursor.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] virtual/threaded/animations/interpolation/transform-interpolation.html [ Timeout ]
+crbug.com/589709 [ Mac10.11 Debug ] virtual/threaded/inspector/tracing/timeline-style-recalc-all-invalidator-types.html [ Timeout ]
+
+crbug.com/589709 [ Retina ] compositing/layer-creation/compositing-reason-removed.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/fixed-scroll-in-empty-root-layer.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/text-color-change.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/updating-scrolling-container-and-content.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/updating-scrolling-container.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/invalidate-when-leaving-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/invalidations-with-large-negative-margin.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/repaint-squashed-layer-in-rect.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/repaint-via-layout-offset.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/resize-squashing-layer-that-needs-full-repaint.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/squash-partial-repaint-inside-squashed-layer.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/squashing/squashing-inside-preserve-3d-element.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/acid_test.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t09-c5526c-display-00-e.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/flexbox/repaint-rtl-column.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/input/ctrl-up-down.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/readonly-disabled-text-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/input-type-text.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/spelling-on-context-menu-key.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/basic/011.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/font-face-data-uri-invalid.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/fontfaceset-download-error.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/non-standard-checkbox-size.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dom/adopt-attribute-crash.svg [ Failure ]
+crbug.com/589709 [ Retina ] fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/date-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/month-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/week-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/formmove2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/indeterminate.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-crash-on-cancel.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-multiline-title.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-nested-style.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-non-latin-update-from-element.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-open-partially-visible.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-resize-after-open.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-size.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/hidden-listbox.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-update-text-popup.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/popup-with-display-none-optgroup.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/onselect-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textAreaLineHeight.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-newline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/style-access-during-imageChanged-crash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/inline/positionedLifetime.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/bad-xml-slash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/xml-colon-entity.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/xml-declaration-missing-ending-mark.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/change-text-content-and-background-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/control-clip.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/multi-layout-one-frame.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/search-field-cancel.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/subtree-root-skipped.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-checkbox.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-menulist.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-radio.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-textfield.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/custom-font-data-crash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/custom-font-data-crash2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/glyph-reordering.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/sub-pixel/text-scaling-ltr.html [ Failure ]
+crbug.com/589709 [ Retina ] http/tests/navigation/navigation-redirect-schedule-crash.html [ Failure ]
+crbug.com/589709 [ Retina ] http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked.html [ Failure ]
+crbug.com/589709 [ Retina ] inspector-protocol/layout-fonts/ogham.html [ Failure ]
+crbug.com/589709 [ Retina ] inspector-protocol/layout-fonts/tifinagh.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug2479-4.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug4527.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/shadows/shadow-drawing.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/comments.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/containment.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/contextual_selectors.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/grouping.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/id_as_selector.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/basic/inheritance.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_bottom.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_bottom_width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_bottom_width_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_color.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_color_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_left.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_left_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_left_width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_left_width_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_right.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_right_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_right_width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_right_width_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_style.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_style_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_top.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_top_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_top_width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_top_width_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/border_width_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/clear.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/clear_float.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/float.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/float_elements_in_series.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/float_margin.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/height.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_bottom.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_left.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_left_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_right.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_right_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_top.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/margin_top_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_bottom.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_bottom_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_left.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_left_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_right.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_right_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_top.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/padding_top_inline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/box_properties/width.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/cascade/cascade_order.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/cascade/important.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/display.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/list_style.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/list_style_image.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/list_style_position.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/list_style_type.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/classification/white_space.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background_attachment.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background_color.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background_image.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background_position.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/background_repeat.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/color_and_background/color.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/conformance/forward_compatible_parsing.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/font_properties/font_family.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/font_properties/font_size.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/font_properties/font_style.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/font_properties/font_variant.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/font_properties/font_weight.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/canvas.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/floating_elements.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/height_of_lines.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/inline_elements.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/replaced_elements.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/formatting_model/vertical_formatting.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/pseudo/anchor.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/pseudo/firstletter.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/pseudo/firstline.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/pseudo/multiple_pseudo_elements.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/pseudo/pseudo_elements_in_selectors.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/letter_spacing.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/line_height.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/text_align.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/text_decoration.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/text_indent.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/text_transform.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/vertical_align.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/text_properties/word_spacing.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/units/color_units.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/units/length_units.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/units/percentage_units.html [ Failure ]
+crbug.com/589709 [ Retina ] css1/units/urls.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/20110323/c543-txt-decor-000.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t050803-c14-classes-00-e.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t0509-c15-ids-01-e.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t0602-c13-inh-underlin-00-e.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t0905-c414-flt-wrap-01-d-g.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t1503-c522-font-family-00-b.html [ Failure ]
+crbug.com/589709 [ Retina ] css2.1/t1508-c527-font-06-b.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/deleting/5144139-2.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/deleting/merge-whitespace-pre.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/execCommand/format-block-with-trailing-br.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/inserting/4278698.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/inserting/paragraph-separator-03.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/pasteboard/innerText-inline-table.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/4975120.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/designmode-no-caret.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/extend-inside-transforms-backward.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/extend-inside-transforms-forward.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/triple-click-in-pre.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/grammar-markers-hidpi.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/grammar-markers.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/inline-spelling-markers-hidpi-composited.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/inline-spelling-markers-hidpi.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/spelling/inline_spelling_markers.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/backgrounds/background-inherit-color-bug.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/basic/015.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/float/shrink-to-avoid-float-complexity.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css-generated-content/014.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/beforeSelectorOnCodeElement.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/color-correction-on-text-shadow.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/empty-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/first-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/first-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/hover-subselector.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/last-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/last-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/line-height-font-order.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/only-child-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/only-of-type-pseudo-class.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/outline-auto-empty-rects.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/shadow-multiple.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/universal-hover-quirk.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/word-space-extra.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/deprecated-flexbox/023.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/deprecated-flexbox/024.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dom/row-inner-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dynamic/text-combine.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-ar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-minimum-date.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-required.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-ru.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/calendar-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/month-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/month-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/week-picker-appearance-step.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/calendar-picker/week-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-one-row-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-two-row-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/color/color-suggestion-picker-with-scrollbar-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/date/date-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/date/date-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/date/date-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/datetimelocal/datetimelocal-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/file/file-input-pressed-state.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/floating-textfield-relayout.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/month/month-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/month/month-appearance-l10n.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/month/month-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/number/number-appearance-spinbutton-layer.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-appearance-separator.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/date-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/month-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/time-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance-with-scroll-bar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/suggestion-picker/week-suggestion-picker-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-placeholder-paint-order.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-text-option-delete.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/linebox-overflow-in-textarea-padding.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-placeholder-paint-order.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/time/time-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/time/time-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/week/week-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/week/week-appearance-pseudo-elements.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/frames/iframe-scrolling-attribute.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/harness/sample-fail-mismatch-reftest.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/html/listing.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/12-55.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/182.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/2-dht.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/23-55.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/55.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/color-profile-background-clip-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/color-profile-munsell-adobe-to-srgb.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/color-profile-munsell-srgb-to-srgb.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/images/color-profile-svg-fill-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/inline/justify-emphasis-inline-box.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/inline/vertical-align-with-fallback-fonts.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/invalid/014.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/invalid/019.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/lists/003-vertical.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/lists/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/loader/text-document-wrapping.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/005.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/007.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/clip-rects-fixed-ancestor.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/overflow-auto-table.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/repaint/shadow-multiple.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/ruby/base-shorter-than-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/018.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/border-collapsing/004-vertical.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/border-collapsing/004.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/invisible-cell-background.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/prepend-in-anonymous-table.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/text-field-baseline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/display-type-change.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/hackernews-comments.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/layout-after-append.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/list-item-above-dbcat.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/css-table-lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/css-table-single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/lots-of-text-many-cells.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/narrow-percentage-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/narrow-specified-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/nested-table-wrapping.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/nested-tables.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/single-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/single-percent-width-cell-lots-of-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/table-cell-inflation.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/table-for-layout.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/wide-percentage-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text-autosizing/tables/wide-specified-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/aat-morx.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/apply-start-width-after-skipped-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-kerning-and-ligatures.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-multiple-renderers.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-partial-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-pointtooffset-calls-cg.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-rtl-override-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-small-caps-punctuation-size.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/atsui-spacing-features.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/004.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/005.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/006.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/007.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/008.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/009.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/011.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/012.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/013.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/014.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/015.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/generic-family-changes.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/basic/generic-family-reset.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/bidi-embedding-pop-and-push-same.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/bidi-img-alt-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/break-word.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/capitalize-boundaries.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/capitalize-empty-generated-string.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/capitalize-preserve-nbsp.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/caps-lock-indicator-disabled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/caps-lock-indicator-enabled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/cg-fallback-bolding.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/cg-vs-atsui.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/complex-path-with-no-subpixel-fonts.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/complex-preferred-logical-widths.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/complex-synthetic-bold-space-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/complex-text-rtl-selection-repaint.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/decorations-with-text-combine.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/delete-hard-break-character.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/ellipsis-platform-font-change.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/embed-at-end-of-pre-wrap-line.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emoji-web-font.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emphasis-complex.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emphasis-ellipsis-complextext.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emphasis-vertical.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emphasis.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/fake-italic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/fallback-for-custom-font.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/firstline/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/firstline/002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/firstline/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/fixed-pitch-control-characters.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-ascent-mac.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-cachekey.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-initial.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-kerning.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-size-adjust.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-smallcaps-layout.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-stretch-variant.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-stretch.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-variant-ligatures.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-weight-600.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-weight-variant.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/font-weight.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/format-control.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/in-rendered-text-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/alef-connected.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-AN-after-L.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-AN-after-empty-run.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-CS-after-AN.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-L2-run-reordering.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-LDB-2-CSS.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-LDB-2-HTML.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-LDB-2-formatting-characters.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-control-chars-treated-as-ZWS.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-european-terminators.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-explicit-embedding.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-ignored-for-first-child-inline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-innertext.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-layout-across-linebreak.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-linebreak-001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-linebreak-002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-linebreak-003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-mirror-he-ar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-neutral-directionality-paragraph-start.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-neutral-run.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-override.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-word-spacing-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/draw-complex-text-from-to.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/hebrew-vowels.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/hindi-spacing.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/hindi-whitespace.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/khmer-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/menulist-width-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/plane2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/rtl-caret.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/rtl-negative-letter-spacing.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/rtl-white-space-pre-wrap.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/text-combine-image-test.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/text-spliced-font.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/thai-baht-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/thai-line-breaks.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/unicode-bidi-plaintext.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/vertical-text-glyph-test.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/wrap-CJK-001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/zerowidthjoiner.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justified-selection-at-edge.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justified-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justify-ideograph-leading-expansion.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justify-padding-distribution.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/letter-spacing-negative-opacity.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/line-breaks-after-white-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/line-breaks.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/line-initial-and-final-swashes.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/midword-break-after-breakable-char.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/midword-break-before-surrogate-pair.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/midword-break-hang.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/monospace-width-cache.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/orientation-sideways.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/reset-emptyRun.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-hard-linebreak.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-multiple-runs.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-painted-separately.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-painting-hidpi.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-rect-line-height-too-big.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/selection-rect-line-height-too-small.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/shadow-no-blur.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/shadow-translucent-fill.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/shaping/same-script-different-lang.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/shaping/shaping-script-order.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/shaping/shaping-selection-rect.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/should-use-atsui.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/small-caps-turkish.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/soft-hyphen-2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/soft-hyphen-3.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/softHyphen.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/stroking-decorations.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/stroking.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/text-letter-spacing.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/text-shadow-no-default-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/text-stroke-with-border.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/trailing-white-space-2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/trailing-white-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/vertical-rl-rtl-linebreak.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/vertical-surrogate-pair.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/wbr-in-pre-crash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/wbr-pre.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/wbr-styled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/wbr.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/webfont-synthetic-bold.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/004.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/005.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/006.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/007.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/008.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/009.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/010.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/011.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/012.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/013.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/014.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/015.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/016.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/017.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/018.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/019.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/020.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/021.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/022.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/023.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/024.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/025.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/026.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/027.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/028.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/029.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/030.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/nbsp-mode-and-linewraps.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/nowrap-clear-float.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/pre-newline-box-test.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/pre-wrap-last-char.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/pre-wrap-line-test.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/pre-wrap-overflow-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/pre-wrap-spaces-after-newline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/select-new-line-with-line-break-normal.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/span-in-word-space-causes-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/tab-character-basics.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/wide-zero-width-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/word-break-run-rounding.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/word-break-soft-hyphen.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/word-break.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/word-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/transforms/shadows.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/border-vertical-lr.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/english-lr-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-lr-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-lr-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-rl-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-rl-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-ruby-vertical-lr.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/japanese-ruby-vertical-rl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/vertical-baseline-alignment.html [ Failure ]
+crbug.com/589709 [ Retina ] fonts/monospace.html [ Failure ]
+crbug.com/589709 [ Retina ] http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure ]
+crbug.com/589709 [ Retina ] ietestcenter/css3/text/textshadow-001.htm [ Failure ]
+crbug.com/589709 [ Retina ] ietestcenter/css3/text/textshadow-002.htm [ Failure ]
+crbug.com/589709 [ Retina ] ietestcenter/css3/text/textshadow-003.htm [ Failure ]
+crbug.com/589709 [ Retina ] ietestcenter/css3/text/textshadow-004.htm [ Failure ]
+crbug.com/589709 [ Retina ] ietestcenter/css3/text/textshadow-010.htm [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/line-height-126.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/line-height-129.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ Failure ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ]
+crbug.com/589709 [ Retina ] media/stable/video-object-fit-stable.html [ Failure ]
+crbug.com/589709 [ Retina ] plugins/embed-attributes-style.html [ Failure ]
+crbug.com/589709 [ Retina ] scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/W3C-SVG-1.1/text-align-08-b.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/as-object/embedded-svg-immediate-offsetWidth-query.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/as-object/embedded-svg-size-changes.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/as-object/nested-embedded-svg-size-changes.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/batik/text/xmlSpace.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/css/text-gradient-shadow.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/css/text-shadow-multiple.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/dominant-baseline-hanging.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/getscreenctm-in-mixed-content.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/object-sizing.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/use-detach.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-appendItem.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-getItem.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-initialize.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-insertItemBefore.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-removeItem.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-replaceItem.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLengthList-xml-dom-modifications.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGLocatable-getCTM-svg-root.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/SVGStringList-basics.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/dom/css-transforms.xhtml [ Failure ]
+crbug.com/589709 [ Retina ] svg/text/small-fonts-2.svg [ Failure ]
+crbug.com/589709 [ Retina ] svg/text/text-selection-fonts-01-t.svg [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/45621.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug10269-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug10296-1.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug1055-1.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug13105.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug13118.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug139524-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug157890.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug20579.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug22019.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug23235.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug44505.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug7112-1.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug7112-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug7121-1.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug83786.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug8950.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/collapsing_borders/bug41262-3.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_index.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_layers-opacity.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_position-table.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table-cell.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table-column-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table-column.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table-row-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table-row.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/marvin/backgr_simple-table.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/other/test6.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug1128.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug21518.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug22122.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-cell.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-column-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-column.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-quirks.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table-row.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_border-table.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_layers-hide.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_layers-show.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-cell.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-column-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-column.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-row-group.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/marvin/backgr_position-table-row.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/display_list_2d_canvas/fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/display_list_2d_canvas/fast/canvas/canvas-imageSmoothingQuality-pixel.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/display_list_2d_canvas/fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/gpu/fast/canvas/alpha.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/gpu/fast/canvas/canvas-text-space-characters.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/rootlayerscrolls/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ]
+crbug.com/589709 [ Retina ] compositing/gestures/gesture-tapHighlight-pixel-rotated-div.html [ Missing ]
+crbug.com/589709 [ Retina ] compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Missing ]
+crbug.com/589709 [ Retina ] compositing/gestures/gesture-tapHighlight-pixel-transparent.html [ Missing ]
+crbug.com/589709 [ Retina ] compositing/gestures/gesture-tapHighlight-with-squashing.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/canvas/canvas-lost-gpu-context.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-empty.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-long.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-many.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-rtl.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-single-option.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-styled.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-tall.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-transform.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-zoom.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-appearance.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-ax.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-event-order.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-key-operations.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-mouse-operations.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/forms/select-popup/popup-menu-position.html [ Missing ]
+crbug.com/589709 [ Retina ] fast/text/sub-pixel/text-scaling-pixel.html [ Missing ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Missing ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/video-controls-timeline.html [ Missing ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Missing ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/video-scrolled-iframe.html [ Missing ]
+crbug.com/589709 [ Retina ] virtual/android/fullscreen/video-specified-size.html [ Missing ]
+crbug.com/589709 [ Retina ] compositing/lots-of-img-layers-with-opacity.html [ Timeout ]
+crbug.com/589709 [ Retina ] compositing/lots-of-img-layers.html [ Timeout ]
+crbug.com/589709 [ Retina ] editing/selection/move-by-word-visually-crash-test-5.html [ Timeout ]
+crbug.com/589709 [ Retina ] editing/undo/redo-after-detach.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/placeholder-position.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/disabled-search-input.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-abs-pos-cancel-button.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-appearance-basic.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-popup-crasher.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-results-attribute.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-rtl.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-transformed.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-vertical-alignment.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-zoomed.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/search/searchfield-heights.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-onchange-fired-with-key-up-down.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/frames/cached-frame-counter.html [ Timeout ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-searchfield.html [ Timeout ]
+crbug.com/589709 [ Retina ] http/tests/misc/timer-vs-loading.html [ Timeout ]
+crbug.com/589709 [ Retina ] http/tests/perf/large-inlined-script.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-fixed.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-auto.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-fixed.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-percentage.html [ Timeout ]
+crbug.com/589709 [ Retina ] imported/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Timeout ]
+crbug.com/589709 [ Retina ] inspector/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Timeout ]
+crbug.com/589709 [ Retina ] jquery/manipulation.html [ Timeout ]
+crbug.com/589709 [ Retina ] media/controls-cast-do-not-fade-out.html [ Timeout ]
+crbug.com/589709 [ Retina ] paint/theme/search-field-results-decoration-crash.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/gpu/fast/canvas/canvas-blend-image.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/gpu/fast/canvas/canvas-blend-solid.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-161.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-19b.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-23.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-24.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-25.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-64.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-68.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-69.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/html/css3-modsel-70.html [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-161.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-19b.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-23.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-24.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-25.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-64.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-68.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-69.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xhtml/css3-modsel-70.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-161.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-19b.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-23.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-24.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-25.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-64.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-68.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-69.xml [ Failure ]
+crbug.com/589709 [ Retina ] css3/selectors3/xml/css3-modsel-70.xml [ Failure ]
+crbug.com/589709 [ Retina ] editing/input/caret-at-the-edge-of-input.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/input/linux_ltr_composition_underline.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/input/linux_rtl_composition_underline.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/input/reveal-caret-of-multiline-input.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/pasteboard/4641033.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/pasteboard/drop-text-without-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/pasteboard/pasting-tabs.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/3690703-2.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/3690703.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/3690719.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/4397952.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/5240265.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/caret-before-select.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/linux_selection_color.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/replaced-boundaries-3.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-across-readonly-input-1.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-across-readonly-input-2.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-across-readonly-input-3.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-across-readonly-input-4.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-across-readonly-input-5.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-box.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/select-element-paragraph-boundary.html [ Failure ]
+crbug.com/589709 [ Retina ] editing/selection/selection-button-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/float/float-avoidance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/margin-collapse/103.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/block/positioning/inline-block-relposition.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/continuationCrash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/input-search-padding.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/line-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/margin-top-bottom-dynamic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/css/text-overflow-input.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dom/HTMLInputElement/input-image-alt-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dom/HTMLTableColElement/resize-table-using-col-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/dynamic/008.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/events/context-no-deselect.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/files/file-in-input-display.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/001.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/basic-buttons.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/basic-inputs.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/blankbuttons.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-default-title.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-positioned.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-sizes.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-style-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-table-styles.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button-text-transform.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button/button-align.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button/button-cannot-be-nested.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/button/button-white-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/control-clip-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/control-clip.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/control-restrict-line-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/file/file-input-direction.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/file/file-input-disabled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/file/input-file-re-render.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/form-element-geometry.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/formmove.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/formmove3.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/image/002.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/image/005.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-align.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-appearance-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-button-sizes.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-first-letter.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-type-text-min-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/input-value.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/minWidthPercent.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/number/number-appearance-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/number/number-appearance-spinbutton-disabled-readonly.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/plaintext-mode-2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-cancel-button-style-sharing.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/search/search-display-none-cancel-button.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/003.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/004.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/HTMLOptionElement_label01.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/HTMLOptionElement_label02.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/HTMLOptionElement_label03.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/HTMLOptionElement_label04.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/HTMLOptionElement_label05.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/basic-selects.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/disabled-select-change-index.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-bidi-align.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-scrollbar-incremental-load.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-width-change.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/listbox-with-display-none-option.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-clip.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-deselect-update.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-no-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-option-wrap.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-restrict-line-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-style-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/menulist-width-change.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/optgroup-rendering.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/option-script.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/option-strip-whitespace.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/option-text-clip.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-align.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-autofilled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-background-none.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-baseline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-block-background.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-change-listbox-size.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-change-listbox-to-popup.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-change-popup-to-listbox.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-dirty-parent-pref-widths.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-disabled-appearance.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-empty-option-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-initial-position.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-item-background-clip.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-list-box-with-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-listbox-multiple-no-focusring.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-multiple-rtl.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-overflow-scroll-inherited.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-overflow-scroll.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-selected.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-size-invalid.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-style.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/select/select-writing-direction-natural.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/stuff-on-my-optgroup.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/submit/submit-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/tabbing-input-iframe.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/targeted-frame-submission.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text-style-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-bkcolor.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-default-bkcolor.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-disabled.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-focus.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-preventDefault.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-readonly.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-visibility.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-appearance-width.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-baseline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-disabled-color.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-double-click-selection-gap-bug.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-field-text-truncated.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-placeholder-visibility-1.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-placeholder-visibility-3.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-readonly-autoscroll.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-readonly-dimmed.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-spaces.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-table.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-text-double-click.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-text-drag-down.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-text-scroll-left-on-blur.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/input-text-word-wrap.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/placeholder-pseudo-style.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/text-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/text-font-height-mismatch.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/textfield-outline.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/text/textfield-overflow-by-value-update.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/basic-textareas-quirks.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/basic-textareas.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/placeholder-appearance-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/reset-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-align.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-appearance-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-placeholder-pseudo-style.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-placeholder-visibility-1.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-placeholder-visibility-2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-scroll-height.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-scrollbar.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-scrolled-focus-ring.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-scrolled-mask.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-scrolled-type.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/forms/textarea/textarea-setinnerhtml.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/html/details-replace-summary-child.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/html/details-replace-text.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/html/keygen.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/lists/dynamic-marker-crash.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/overflow-x-y.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/overflow/scrollRevealButton.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/document-write-option.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/entity-comment-in-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/parser/open-comment-in-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/replaced-breaking-mixture.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/replaced-breaking.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/replaced/width100percent-button.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/selectors/064.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/append-cells2.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/remove-td-display-none.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/table/spanOverlapRepaint.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/drawBidiText.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/emoticons.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/arabic-vertical-offset.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-listbox-atsui.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-listbox.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bidi-menulist.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/bold-bengali.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/complex-character-based-fallback.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/complex-joining-using-gpos.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/danda-space.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/lang-glyph-cache-separation.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/mixed-directionality-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/pop-up-button-text-alignment-and-direction.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justify-ideograph-complex.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/justify-ideograph-simple.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/large-text-composed-char.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/textIteratorNilRenderer.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/unicode-fallback-font.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/updateNewFont.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/text/whitespace/normal-after-nowrap-breaking.html [ Failure ]
+crbug.com/589709 [ Retina ] fast/writing-mode/text-orientation-basic.html [ Failure ]
+crbug.com/589709 [ Retina ] http/tests/filesystem/input-display.html [ Failure ]
+crbug.com/589709 [ Retina ] media/track/track-cue-rendering-vertical.html [ Failure ]
+crbug.com/589709 [ Retina ] plugins/mouse-click-plugin-clears-selection.html [ Failure ]
+crbug.com/589709 [ Retina ] svg/custom/inline-svg-in-xhtml.xml [ Failure ]
+crbug.com/589709 [ Retina ] svg/hixie/mixed/003.xml [ Failure ]
+crbug.com/589709 [ Retina ] svg/text/text-with-geometric-precision.svg [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug1188.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug1318.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug138725.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug18359.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug194024.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug2479-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug2479-3.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug26178.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug28928.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug29326.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug30559.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug30692.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug33855.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug39209.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug4382.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug4429.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug46368-1.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug46368-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug51037.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug51727.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug52505.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug52506.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug59354.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug60749.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug68912.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug7342.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/bugs/bug96334.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/collapsing_borders/bug41262-4.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/core/margins.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/dom/tableDom.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla/other/move_row.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug1725.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/bugs/bug58402-2.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html [ Failure ]
+crbug.com/589709 [ Retina ] tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ]
+crbug.com/589709 [ Retina ] transforms/2d/zoom-menulist.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/pointerevent/fast/events/context-no-deselect.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/threaded/printing/setPrinting.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/threaded/printing/width-overflow.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/autoscroll.html [ Failure ]
+crbug.com/589709 [ Retina ] virtual/trustedeventsdefaultaction/fast/events/context-no-deselect.html [ Failure ]
+
+# FIXME(dpranke): We're also seeing failures on 10.9 and 10.10 that I wouldn't have expected from the 10.11 changes.
+# Suppress those as well for now so the bots can be green while I can dig in further.
+crbug.com/589709 [ Mac10.9 ] editing/input/ctrl-up-down.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] editing/selection/readonly-disabled-text-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] editing/spelling/spelling-on-context-menu-key.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/calendar-picker/date-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/calendar-picker/month-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/calendar-picker/week-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-crash-on-cancel.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-multiline-title.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-nested-style.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-non-latin-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-open-partially-visible.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-resize-after-open.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-size.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select/popup-with-display-none-optgroup.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/sub-pixel/text-scaling-ltr.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/harness/sample-fail-mismatch-reftest.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/font-cachekey.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/international/draw-complex-text-from-to.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/international/zerowidthjoiner.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/line-height-126.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/line-height-129.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] media/stable/video-object-fit-stable.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] compositing/lots-of-img-layers-with-opacity.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] compositing/lots-of-img-layers.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select/menulist-onchange-fired-with-key-up-down.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] http/tests/misc/submit-post-keygen.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] http/tests/misc/timer-vs-loading.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-object-percentage.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] imported/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] jquery/manipulation.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] media/controls-cast-do-not-fade-out.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/gpu/fast/canvas/canvas-blend-solid.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/pointerevent/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.9 ] editing/input/linux_ltr_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] editing/input/linux_rtl_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] editing/selection/linux_selection_color.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/international/arabic-vertical-offset.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] fast/text/international/complex-joining-using-gpos.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] svg/text/text-with-geometric-precision.svg [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/threaded/printing/setPrinting.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] virtual/threaded/printing/width-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.9 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-div.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] compositing/gestures/gesture-tapHighlight-pixel-transparent.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] compositing/gestures/gesture-tapHighlight-with-squashing.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/canvas/canvas-lost-gpu-context.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-empty.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-long.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-many.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-rtl.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-single-option.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-styled.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-tall.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-transform.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-zoom.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-appearance.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-ax.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-event-order.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-key-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-mouse-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/forms/select-popup/popup-menu-position.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] fast/text/sub-pixel/text-scaling-pixel.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/video-controls-timeline.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/video-scrolled-iframe.html [ Missing ]
+crbug.com/589709 [ Mac10.9 ] virtual/android/fullscreen/video-specified-size.html [ Missing ]
+
+crbug.com/589709 [ Mac10.10 ] editing/input/ctrl-up-down.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] editing/selection/readonly-disabled-text-selection.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] editing/spelling/spelling-on-context-menu-key.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/calendar-picker/date-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/calendar-picker/month-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/calendar-picker/week-open-picker-with-f4-key.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-crash-on-cancel.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-multiline-title.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-nested-style.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-non-latin-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-open-partially-visible.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-resize-after-open.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-size.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-touch-operations.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-update-from-element.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select/popup-with-display-none-optgroup.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/sub-pixel/text-scaling-ltr.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-document.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu-position.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/menu-key-context-menu.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click-hyperlink.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/harness/sample-fail-mismatch-reftest.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/font-cachekey.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/international/draw-complex-text-from-to.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/international/zerowidthjoiner.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/line-height-126.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/line-height-129.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] media/stable/video-object-fit-stable.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] compositing/lots-of-img-layers-with-opacity.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] compositing/lots-of-img-layers.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select/menulist-onchange-fired-with-key-up-down.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] http/tests/misc/submit-post-keygen.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] http/tests/misc/timer-vs-loading.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] imported/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] media/controls-cast-do-not-fade-out.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/pointerevent/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-click.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-drag.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-event-fired.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-in-iframe.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs-forbidden.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] virtual/trustedeventsdefaultaction/fast/events/panScroll-nested-divs.html [ Timeout ]
+crbug.com/589709 [ Mac10.10 ] editing/input/linux_ltr_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] editing/input/linux_rtl_composition_underline.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] editing/selection/linux_selection_color.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/international/arabic-vertical-offset.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] fast/text/international/complex-joining-using-gpos.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] svg/text/text-with-geometric-precision.svg [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/threaded/printing/setPrinting.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] virtual/threaded/printing/width-overflow.html [ Failure ]
+crbug.com/589709 [ Mac10.10 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-div.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] compositing/gestures/gesture-tapHighlight-pixel-transparent.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] compositing/gestures/gesture-tapHighlight-with-squashing.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/canvas/canvas-lost-gpu-context.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-empty.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-long.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-many.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-rtl.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-single-option.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-styled.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-tall.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-texttransform.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-transform.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-zoom.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance-zoom090.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-appearance.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-ax.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-event-order.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-key-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-mouse-operations.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/forms/select-popup/popup-menu-position.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] fast/text/sub-pixel/text-scaling-pixel.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/full-screen-iframe-allowed-video.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/video-controls-timeline.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/video-scrolled-iframe.html [ Missing ]
+crbug.com/589709 [ Mac10.10 ] virtual/android/fullscreen/video-specified-size.html [ Missing ]
diff --git a/third_party/WebKit/LayoutTests/battery-status/api-defined.html b/third_party/WebKit/LayoutTests/battery-status/api-defined.html
index ea2a985..3dfb9ae 100644
--- a/third_party/WebKit/LayoutTests/battery-status/api-defined.html
+++ b/third_party/WebKit/LayoutTests/battery-status/api-defined.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -19,7 +21,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 var battery;
diff --git a/third_party/WebKit/LayoutTests/battery-status/multiple-promises-after-resolve.html b/third_party/WebKit/LayoutTests/battery-status/multiple-promises-after-resolve.html
index 2e926fd..76edf32 100644
--- a/third_party/WebKit/LayoutTests/battery-status/multiple-promises-after-resolve.html
+++ b/third_party/WebKit/LayoutTests/battery-status/multiple-promises-after-resolve.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -20,7 +22,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
diff --git a/third_party/WebKit/LayoutTests/battery-status/multiple-promises.html b/third_party/WebKit/LayoutTests/battery-status/multiple-promises.html
index 5b3c850..68e5800 100644
--- a/third_party/WebKit/LayoutTests/battery-status/multiple-promises.html
+++ b/third_party/WebKit/LayoutTests/battery-status/multiple-promises.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -21,7 +23,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
diff --git a/third_party/WebKit/LayoutTests/battery-status/multiple-windows-page-visibility.html b/third_party/WebKit/LayoutTests/battery-status/multiple-windows-page-visibility.html
index be5cc933..230f148 100644
--- a/third_party/WebKit/LayoutTests/battery-status/multiple-windows-page-visibility.html
+++ b/third_party/WebKit/LayoutTests/battery-status/multiple-windows-page-visibility.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -21,7 +23,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
diff --git a/third_party/WebKit/LayoutTests/battery-status/multiple-windows.html b/third_party/WebKit/LayoutTests/battery-status/multiple-windows.html
index dbd4c66..46a3e66c 100644
--- a/third_party/WebKit/LayoutTests/battery-status/multiple-windows.html
+++ b/third_party/WebKit/LayoutTests/battery-status/multiple-windows.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -21,7 +23,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
diff --git a/third_party/WebKit/LayoutTests/battery-status/no-gc-with-eventlisteners.html b/third_party/WebKit/LayoutTests/battery-status/no-gc-with-eventlisteners.html
index cbd4ad1..21649370 100644
--- a/third_party/WebKit/LayoutTests/battery-status/no-gc-with-eventlisteners.html
+++ b/third_party/WebKit/LayoutTests/battery-status/no-gc-with-eventlisteners.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -19,7 +21,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
@@ -45,7 +47,7 @@
     setTimeout(fireLevelChange, 0);
 });
 
-setAndFireMockBatteryInfo(false, 10, 20, 0.5); 
+setAndFireMockBatteryInfo(false, 10, 20, 0.5);
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/battery-status/page-visibility.html b/third_party/WebKit/LayoutTests/battery-status/page-visibility.html
index 7f00ac7b..028a42bc 100644
--- a/third_party/WebKit/LayoutTests/battery-status/page-visibility.html
+++ b/third_party/WebKit/LayoutTests/battery-status/page-visibility.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -19,7 +21,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
diff --git a/third_party/WebKit/LayoutTests/battery-status/promise-with-eventlisteners.html b/third_party/WebKit/LayoutTests/battery-status/promise-with-eventlisteners.html
index a739f8e7..b2f7716 100644
--- a/third_party/WebKit/LayoutTests/battery-status/promise-with-eventlisteners.html
+++ b/third_party/WebKit/LayoutTests/battery-status/promise-with-eventlisteners.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -19,7 +21,7 @@
                         chargingTime: chargingTime,
                         dischargingTime: dischargingTime,
                         level: level };
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 // compare obtained battery values with the mock values
@@ -43,7 +45,7 @@
     battery.addEventListener('dischargingtimechange', onDischargingTimeChange);
     battery.addEventListener('chargingtimechange', onChargingTimeChange);
     battery.addEventListener('levelchange', onLevelChange);
-    
+
     setTimeout(fireNextMockBatteryInfo, 0);
 }
 
@@ -104,7 +106,7 @@
 }
 
 navigator.getBattery().then(batteryStatusSuccess, batteryStatusFailure);
-setAndFireMockBatteryInfo(false, 10, 20, 0.5); 
+setAndFireMockBatteryInfo(false, 10, 20, 0.5);
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/battery-status/restricted-level-precision.html b/third_party/WebKit/LayoutTests/battery-status/restricted-level-precision.html
index b2706a5d..8561b467 100644
--- a/third_party/WebKit/LayoutTests/battery-status/restricted-level-precision.html
+++ b/third_party/WebKit/LayoutTests/battery-status/restricted-level-precision.html
@@ -7,6 +7,8 @@
 
 if (!window.testRunner)
     debug('This test cannot be run without the TestRunner');
+if (!window.internals)
+    debug('This test cannot be run without the window.internals');
 
 // Clean-up any unused battery manager objects from previous tests.
 gc();
@@ -17,7 +19,7 @@
 var levelRounded = 0.56;
 
 function setAndFireMockBatteryInfo(charging, chargingTime, dischargingTime, level) {
-    testRunner.didChangeBatteryStatus(charging, chargingTime, dischargingTime, level);
+    window.internals.updateBatteryStatus(charging, chargingTime, dischargingTime, level);
 }
 
 var battery;
@@ -34,7 +36,7 @@
 }
 
 navigator.getBattery().then(batteryStatusSuccess, batteryStatusFailure);
-setAndFireMockBatteryInfo(false, 10, 20, levelFullPrecision); 
+setAndFireMockBatteryInfo(false, 10, 20, levelFullPrecision);
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-expected.txt
similarity index 73%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-expected.txt
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-expected.txt
index 63e32b44..bd3a4f8 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-expected.txt
@@ -1,4 +1,4 @@
-Tests that the constructor of the OffscreenCanvasTemp can be called on the main thread
+Tests that the constructor of the OffscreenCanvas can be called on the main thread
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker-expected.txt
similarity index 73%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker-expected.txt
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker-expected.txt
index d2b8ec5..5cc1e90c 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker-expected.txt
@@ -1,4 +1,4 @@
-Tests that the OffscreenCanvasTemp can be constructed on a worker thread.
+Tests that the OffscreenCanvas can be constructed on a worker thread.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker.html
similarity index 89%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker.html
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker.html
index 8ad2a50..b87006d 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor-in-worker.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor-in-worker.html
@@ -4,7 +4,7 @@
 <body>
 <script id="myWorker" type="text/worker">
 self.onmessage = function(e) {
-  var aCanvas = new OffscreenCanvasTemp(50, 50);
+  var aCanvas = new OffscreenCanvas(50, 50);
   self.postMessage({version:'first', width:aCanvas.width, height:aCanvas.height});
 
   aCanvas.width = 100;
@@ -15,7 +15,7 @@
 
 <script>
 jsTestIsAsync = true;
-description("Tests that the OffscreenCanvasTemp can be constructed on a worker thread.");
+description("Tests that the OffscreenCanvas can be constructed on a worker thread.");
 
 var width;
 var height;
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor.html
similarity index 64%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor.html
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor.html
index 7f978c2..0b61a34 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-constructor.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-constructor.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html>
 <script src="../../resources/js-test.js"></script>
 <script>
-description("Tests that the constructor of the OffscreenCanvasTemp can be called on the main thread");
+description("Tests that the constructor of the OffscreenCanvas can be called on the main thread");
 
-var aCanvas = new OffscreenCanvasTemp(50, 50);
+var aCanvas = new OffscreenCanvas(50, 50);
 shouldBe("aCanvas.width", "50");
 shouldBe("aCanvas.height", "50");
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-expected.txt
new file mode 100644
index 0000000..9f86eec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-expected.txt
@@ -0,0 +1,23 @@
+Tests that the OffscreenCanvas can handle invalid arguments
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS canvas1.width is setWidth-1
+PASS canvas1.height is setHeight-1
+PASS canvas1.width is 0
+PASS canvas1.height is 0
+PASS new OffscreenCanvas(-1, -1) threw exception TypeError: Failed to construct 'OffscreenCanvas': Value is outside the 'unsigned long' value range..
+PASS canvas2.width is 0
+PASS canvas2.height is 0
+PASS canvas2.width is setWidth-1
+PASS canvas2.height is setHeight-1
+PASS canvas2.width = -1 threw exception TypeError: Failed to set the 'width' property on 'OffscreenCanvas': Value is outside the 'unsigned long' value range..
+PASS canvas2.height = -1 threw exception TypeError: Failed to set the 'height' property on 'OffscreenCanvas': Value is outside the 'unsigned long' value range..
+PASS canvas2.width = obj threw exception TypeError: Failed to set the 'width' property on 'OffscreenCanvas': Value is not of type 'unsigned long'..
+PASS canvas2.height = obj threw exception TypeError: Failed to set the 'height' property on 'OffscreenCanvas': Value is not of type 'unsigned long'..
+PASS new OffscreenCanvas(obj, obj) threw exception TypeError: Failed to construct 'OffscreenCanvas': Value is not of type 'unsigned long'..
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker-expected.txt
similarity index 74%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker-expected.txt
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker-expected.txt
index eab15bf..30f410a2 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker-expected.txt
@@ -1,4 +1,4 @@
-Tests that the OffscreenCanvasTemp can handle invalid arguments on a worker
+Tests that the OffscreenCanvas can handle invalid arguments on a worker
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html
similarity index 85%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker.html
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html
index 88d923e..8e597af 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-in-worker.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args-in-worker.html
@@ -7,17 +7,17 @@
 var setHeight = Math.pow(2, 31);
 
 self.onmessage = function(e) {
-  var canvas1 = new OffscreenCanvasTemp(setWidth, setHeight);
+  var canvas1 = new OffscreenCanvas(setWidth, setHeight);
   self.postMessage({version:'canvas1', width:canvas1.width, height:canvas1.height});
 
-  var canvas2 = new OffscreenCanvasTemp(null, null);
+  var canvas2 = new OffscreenCanvas(null, null);
   self.postMessage({version:'canvas2', width:canvas2.width, height:canvas2.height});
 };
 </script>
 
 <script>
 jsTestIsAsync = true;
-description("Tests that the OffscreenCanvasTemp can handle invalid arguments on a worker");
+description("Tests that the OffscreenCanvas can handle invalid arguments on a worker");
 
 var width;
 var height;
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args.html
similarity index 76%
rename from third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args.html
rename to third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args.html
index 8ebb85d..a0171be 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-invalid-args.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <script src="../../resources/js-test.js"></script>
 <script>
-description("Tests that the OffscreenCanvasTemp can handle invalid arguments");
+description("Tests that the OffscreenCanvas can handle invalid arguments");
 
 // Since blink uses signed int internally, this case tests how the constructor
 // responds to the arguments that are larger than INT_MAX which would cause
@@ -10,7 +10,7 @@
 var setHeight = Math.pow(2, 31);
 var obj = {Name: "John Doe", Age: 30};
 
-var canvas1 = new OffscreenCanvasTemp(setWidth, setHeight);
+var canvas1 = new OffscreenCanvas(setWidth, setHeight);
 shouldBe("canvas1.width", "setWidth-1");
 shouldBe("canvas1.height", "setHeight-1");
 
@@ -19,9 +19,9 @@
 shouldBe("canvas1.width", "0");
 shouldBe("canvas1.height", "0");
 
-shouldThrow("new OffscreenCanvasTemp(-1, -1)");
+shouldThrow("new OffscreenCanvas(-1, -1)");
 
-var canvas2 = new OffscreenCanvasTemp(null, null);
+var canvas2 = new OffscreenCanvas(null, null);
 shouldBe("canvas2.width", "0");
 shouldBe("canvas2.height", "0");
 
@@ -36,5 +36,5 @@
 shouldThrow("canvas2.width = obj");
 shouldThrow("canvas2.height = obj");
 
-shouldThrow("new OffscreenCanvasTemp(obj, obj)");
+shouldThrow("new OffscreenCanvas(obj, obj)");
 </script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-expected.txt
deleted file mode 100644
index f667ba7a..0000000
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvasTemp-invalid-args-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Tests that the OffscreenCanvasTemp can handle invalid arguments
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS canvas1.width is setWidth-1
-PASS canvas1.height is setHeight-1
-PASS canvas1.width is 0
-PASS canvas1.height is 0
-PASS new OffscreenCanvasTemp(-1, -1) threw exception TypeError: Failed to construct 'OffscreenCanvasTemp': Value is outside the 'unsigned long' value range..
-PASS canvas2.width is 0
-PASS canvas2.height is 0
-PASS canvas2.width is setWidth-1
-PASS canvas2.height is setHeight-1
-PASS canvas2.width = -1 threw exception TypeError: Failed to set the 'width' property on 'OffscreenCanvasTemp': Value is outside the 'unsigned long' value range..
-PASS canvas2.height = -1 threw exception TypeError: Failed to set the 'height' property on 'OffscreenCanvasTemp': Value is outside the 'unsigned long' value range..
-PASS canvas2.width = obj threw exception TypeError: Failed to set the 'width' property on 'OffscreenCanvasTemp': Value is not of type 'unsigned long'..
-PASS canvas2.height = obj threw exception TypeError: Failed to set the 'height' property on 'OffscreenCanvasTemp': Value is not of type 'unsigned long'..
-PASS new OffscreenCanvasTemp(obj, obj) threw exception TypeError: Failed to construct 'OffscreenCanvasTemp': Value is not of type 'unsigned long'..
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
index ef3f742..af312af 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
@@ -94,7 +94,7 @@
 PASS window.cached_screen.width is 0
 PASS window.cached_screen_orientation.angle is 0
 PASS window.cached_screen_orientation.onchange is null
-FAIL window.cached_screen_orientation.type should be . Was landscape-primary.
+FAIL window.cached_screen_orientation.type should be . Was portrait-primary.
 PASS window.cached_scrollbars.visible is false
 PASS window.cached_speechSynthesis.onvoiceschanged is null
 PASS window.cached_speechSynthesis.paused is false
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
index ecddff7..bec90ae 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -94,7 +94,7 @@
 PASS window.cached_screen.width is 0
 PASS window.cached_screen_orientation.angle is 0
 PASS window.cached_screen_orientation.onchange is null
-FAIL window.cached_screen_orientation.type should be . Was landscape-primary.
+FAIL window.cached_screen_orientation.type should be . Was portrait-primary.
 PASS window.cached_scrollbars.visible is false
 PASS window.cached_speechSynthesis.onvoiceschanged is null
 PASS window.cached_speechSynthesis.paused is false
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
index c4ad6b4..5962ffc 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -94,7 +94,7 @@
 PASS window.cached_screen.width is 0
 PASS window.cached_screen_orientation.angle is 0
 PASS window.cached_screen_orientation.onchange is null
-FAIL window.cached_screen_orientation.type should be . Was landscape-primary.
+FAIL window.cached_screen_orientation.type should be . Was portrait-primary.
 PASS window.cached_scrollbars.visible is false
 PASS window.cached_speechSynthesis.onvoiceschanged is null
 PASS window.cached_speechSynthesis.paused is false
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-deep-path-empty.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-deep-path-empty.html
new file mode 100644
index 0000000..997ac44
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-deep-path-empty.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<div id=target></div>
+<script>
+test(() => {
+  const ev = new Event("sample");
+  var dispatched = false;
+  target.addEventListener("sample", (e) => {
+    assert_true(e.deepPath().length > 0);
+    dispatched = true;
+  });
+  assert_array_equals(ev.deepPath(), []);
+  target.dispatchEvent(ev);
+  assert_true(dispatched);
+  assert_array_equals(ev.deepPath(), []);
+}, "Event.deepPath() should return an empty array before/after dispatching an event");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/pointerevents/mouse-pointer-chorded-buttons.html b/third_party/WebKit/LayoutTests/fast/events/pointerevents/mouse-pointer-chorded-buttons.html
index b3eedb1..ee886c3 100644
--- a/third_party/WebKit/LayoutTests/fast/events/pointerevents/mouse-pointer-chorded-buttons.html
+++ b/third_party/WebKit/LayoutTests/fast/events/pointerevents/mouse-pointer-chorded-buttons.html
@@ -95,7 +95,7 @@
   eventSender.mouseMoveTo(rect.left + 5, rect.top + 5);
   testReceivedEvents([
     "pointerdown 1,4", "mousedown 1,4",
-    "pointermove 1,4", "mousemove 1,4",
+    "pointermove -1,4", "mousemove 1,4",
     "pointerup 1,0", "mouseup 1,0",
     "pointermove -1,0", "mousemove 0,0",
   ], "Move with & without button");
@@ -128,7 +128,7 @@
     "pointerup 0,0",
     "pointerdown 0,1", "mousedown 0,1",
     "pointerup 0,0", "mouseup 0,0"
-  ], "LM button with perevetDefault on pointerdown");
+  ], "LM button with preventDefault on pointerdown");
 }
 
 function run() {
diff --git a/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-navigation-allowed-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-navigation-allowed-expected.txt
index 9dc40ff1..2aa7e95f 100644
--- a/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-navigation-allowed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-navigation-allowed-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Failed to load '' as a plugin, because the frame into which the plugin is loading is sandboxed.
 This test verifies that a sandboxed iframe CAN navigate both itself and a child in the frame tree. It also verifies that the sandbox attribute remains intact after a frame has been navigated, and that sandbox attributes are propagated through the frame hierarchy.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-plugins-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-plugins-expected.txt
index fe2172c..7ad5f70 100644
--- a/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-plugins-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/frames/sandboxed-iframe-plugins-expected.txt
@@ -1,3 +1,5 @@
+CONSOLE ERROR: Failed to load 'data:text/plain,' as a plugin, because the frame into which the plugin is loading is sandboxed.
+CONSOLE ERROR: Failed to load '' as a plugin, because the frame into which the plugin is loading is sandboxed.
 This test verifies that sandboxing of plugins works as intended. Two tests are made, each in one sandboxed and one non-sandboxed IFrame: embeds and objects.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight.js
index c2b1389d..fea9e4d 100644
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight.js
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight.js
@@ -12,110 +12,94 @@
     var checkMethod = checkJsonpMethod.bind(this, method);
     TEST_TARGETS.push(
       // Tests for Access-Control-Allow-Headers header.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method + '&headers=CUSTOM',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=*',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=' + BASE_ORIGIN,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=' + BASE_ORIGIN +
        '&ACAHeaders=x-serviceworker-test',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test' +
-       '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
        [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=' + BASE_ORIGIN +
-       '&ACAHeaders=x-serviceworker-test' +
-       '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+       '&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
        [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
 
       // Test that Access-Control-Allow-Headers is checked in
       // CORS preflight fetch.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&ACAHeaders=x-serviceworker-test&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&ACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchRejected]],
 
       // Test that CORS check is done in both preflight and main fetch.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAHeaders=x-serviceworker-test' +
-       '&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&PACAOrigin=*&PACAHeaders=x-serviceworker-test' +
-       '&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchRejected]],
 
       // Test that Access-Control-Expose-Headers of CORS preflight is ignored.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PACEHeaders=Content-Length, X-ServiceWorker-ServerHeader&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PACEHeaders=Content-Length, X-ServiceWorker-ServerHeader&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
 
       // Test that CORS preflight with Status 2XX succeeds.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PreflightTest=201',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=201',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
 
       // Test that CORS preflight with Status other than 2XX fails.
       // https://crbug.com/452394
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PreflightTest=301',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=301',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PreflightTest=401',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=401',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PreflightTest=500',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PreflightTest=500',
        [fetchRejected]],
 
       // Test CORS preflight with multiple request headers.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM2&ACAOrigin=*' +
-       '&PACAOrigin=*&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader2]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-servicewOrker-test&PreflightTest=200',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-servicewOrker-test&PreflightTest=200',
        [fetchRejected]],
 
       // Test request headers sent in CORS preflight requests.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-serviceworker-test&PACRMethod=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-serviceworker-test&PACRMethod=' + method +
        '&PACRHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
       // Test Access-Control-Request-Headers is sorted https://crbug.com/452391
 
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*' +
-       '&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PACRMethod=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PACRMethod=' + method +
        '&PACRHeaders=x-serviceworker-s, x-serviceworker-test, x-serviceworker-u, x-serviceworker-ua, x-serviceworker-v&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader2]]);
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight2.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight2.js
index ec49232e..b09bd7f8 100644
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight2.js
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors-preflight2.js
@@ -18,157 +18,149 @@
       // https://fetch.spec.whatwg.org/#cors-preflight-fetch
       // Tests for Access-Control-Allow-Methods header.
       // Tests for Access-Control-Allow-Headers header.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method,
+      [OTHER_BASE_URL + 'mode=cors&method=' + method,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&ACAMethods=' + method,
+      [OTHER_BASE_URL + 'mode=cors&method=' + method + '&ACAMethods=' + method,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&ACAOrigin=*',
+      [OTHER_BASE_URL + 'mode=cors&method=' + method + '&ACAOrigin=*',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&ACAMethods=' + method,
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&headers=CUSTOM&ACAMethods=' + method,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&headers=CUSTOM&ACAMethods=' + method +
        '&ACAHeaders=x-serviceworker-test',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&headers=CUSTOM&ACAMethods=' + method +
-       '&ACAHeaders=x-serviceworker-test' +
-       '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
-       [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
-       [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX',
-       [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX' +
-       '&ACAHeaders=x-serviceworker-test',
-       [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
-       [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
-       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX' +
        '&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
        [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX',
+       [fetchRejected]],
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
+       [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+       [checkMethod, hasCustomHeader]],
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
+       '&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+       [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+       [checkMethod, hasCustomHeader]],
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN + '&ACAMethods=' + method,
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN + '&headers=CUSTOM&ACAMethods=' + method,
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN + '&headers=CUSTOM&ACAMethods=' + method +
        '&ACAHeaders=x-serviceworker-test',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN + '&headers=CUSTOM&ACAMethods=' + method +
-       '&ACAHeaders=x-serviceworker-test' +
-       '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+       '&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
        [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN + '&headers=CUSTOM&ACAMethods=PUT, XXX',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN +
        '&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=' + BASE_ORIGIN +
-       '&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test' +
-       '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+       '&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
        [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
 
       // Test that Access-Control-Allow-Methods is checked in
       // CORS preflight fetch.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&ACAMethods=' + method + '&PreflightTest=200',
        [fetchRejected]],
 
       // Test that Access-Control-Allow-Headers is checked in
       // CORS preflight fetch.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&PACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&ACAHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchRejected]],
 
       // Test that CORS check is done in both preflight and main fetch.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAMethods=' + method + '&PreflightTest=200',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=200',
        [fetchRejected]],
 
       // Test that Access-Control-Expose-Headers of CORS preflight is ignored.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
-       '&PACEHeaders=Content-Length, X-ServiceWorker-ServerHeader' +
-       '&PreflightTest=200',
+       '&PACEHeaders=Content-Length, X-ServiceWorker-ServerHeader&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod]],
 
       // Test that CORS preflight with Status 2XX succeeds.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=201',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod]],
 
       // Test that CORS preflight with Status other than 2XX fails.
       // https://crbug.com/452394
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=301',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=401',
        [fetchRejected]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method + '&PreflightTest=500',
        [fetchRejected]],
 
       // Test CORS preflight with multiple request headers.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader2]],
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&PACAHeaders=x-servicewOrker-test&PreflightTest=200',
        [fetchRejected]],
 
       // Test request headers sent in CORS preflight requests.
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&PACAHeaders=x-serviceworker-test&PACRMethod=' + method +
        '&PACRHeaders=x-serviceworker-test&PreflightTest=200',
        [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
        [checkMethod, hasCustomHeader]],
       // Test Access-Control-Request-Headers is sorted https://crbug.com/452391
-      [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=' + method +
+      [OTHER_BASE_URL + 'mode=cors&method=' + method +
        '&headers=CUSTOM2&ACAOrigin=*&PACAOrigin=*&PACAMethods=' + method +
        '&PACAHeaders=x-servicEworker-u, x-servicEworker-ua, x-servicewOrker-test, x-sErviceworker-s, x-sErviceworker-v&PACRMethod=' + method +
        '&PACRHeaders=x-serviceworker-s, x-serviceworker-test, x-serviceworker-u, x-serviceworker-ua, x-serviceworker-v&PreflightTest=200',
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors.js
index 93b153c3..409cf6a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors.js
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/cors.js
@@ -18,40 +18,34 @@
   // CORS check
   // https://fetch.spec.whatwg.org/#concept-cors-check
   // Tests for Access-Control-Allow-Origin header.
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET',
+  [OTHER_BASE_URL + 'mode=cors&method=GET',
    [fetchRejected]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=' + BASE_ORIGIN,
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN,
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET&' +
-   'ACAOrigin=' + BASE_ORIGIN + ',http://www.example.com',
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN +
+   ',http://www.example.com',
    [fetchRejected]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=http://www.example.com',
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://www.example.com',
    [fetchRejected]],
 
   // CORS filtered response
   // https://fetch.spec.whatwg.org/#concept-filtered-response-cors
   // Tests for Access-Control-Expose-Headers header.
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET&ACAOrigin=*' +
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader',
+   [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
+   [methodIsGET]],
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN +
    '&ACEHeaders=X-ServiceWorker-ServerHeader',
    [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsGET]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=' + BASE_ORIGIN +
-   '&ACEHeaders=X-ServiceWorker-ServerHeader',
-   [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
-   [methodIsGET]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsGET]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=' + BASE_ORIGIN +
+  [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN +
    '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsGET]],
@@ -61,40 +55,34 @@
   // CORS check
   // https://fetch.spec.whatwg.org/#concept-cors-check
   // Tests for Access-Control-Allow-Origin header.
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST',
+  [OTHER_BASE_URL + 'mode=cors&method=POST',
    [fetchRejected]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST&ACAOrigin=*',
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPOST]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=' + BASE_ORIGIN,
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=' + BASE_ORIGIN,
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPOST]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=' + BASE_ORIGIN +
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=' + BASE_ORIGIN +
    ',http://www.example.com',
    [fetchRejected]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=http://www.example.com',
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://www.example.com',
    [fetchRejected]],
 
   // CORS filtered response
   // https://fetch.spec.whatwg.org/#concept-filtered-response-cors
   // Tests for Access-Control-Expose-Headers header.
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader',
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader',
    [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsPOST]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=' + BASE_ORIGIN + '&ACEHeaders=X-ServiceWorker-ServerHeader',
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=' + BASE_ORIGIN +
+   '&ACEHeaders=X-ServiceWorker-ServerHeader',
    [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsPOST]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsPOST]],
-  [OTHER_BASE_URL + 'mode=cors&credentials=same-origin&method=POST' +
-   '&ACAOrigin=' + BASE_ORIGIN +
+  [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=' + BASE_ORIGIN +
    '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsPOST]],
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect-loop.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect-loop.js
index 6b413a62d2..31bdae0 100644
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect-loop.js
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect-loop.js
@@ -5,44 +5,42 @@
 
 var TEST_TARGETS = [
   // Redirect loop: same origin -> same origin
-  [REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=20&mode=cors' +
-   '&credentials=same-origin',
+  [REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=20&mode=cors',
    [fetchResolved, hasContentLength, hasBody, typeBasic],
    [methodIsGET, authCheck1]],
-  [REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=21&mode=cors' +
-   '&credentials=same-origin',
+  [REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=21&mode=cors',
    [fetchRejected]],
 
   // Redirect loop: same origin -> other origin
   [REDIRECT_LOOP_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&Count=20&mode=cors&credentials=same-origin&method=GET',
+   '&Count=20&mode=cors&method=GET',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   // FIXME: due to the current implementation of Chromium,
   // Count=21 is resolved, Count=22 is rejected.
   // https://crbug.com/353768
   [REDIRECT_LOOP_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&Count=22&mode=cors&credentials=same-origin&method=GET',
+   '&Count=22&mode=cors&method=GET',
    [fetchRejected]],
 
   // Redirect loop: other origin -> same origin
   [OTHER_REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&Count=20&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [OTHER_REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&Count=21&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&Count=21&mode=cors&method=GET&ACAOrigin=*',
    [fetchRejected]],
 
   // Redirect loop: other origin -> other origin
   [OTHER_REDIRECT_LOOP_URL +
    encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&Count=20&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [OTHER_REDIRECT_LOOP_URL +
    encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&Count=21&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&Count=21&mode=cors&method=GET&ACAOrigin=*',
    [fetchRejected]],
 ];
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect.js
index 7f33e95b..f34a736a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect.js
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/thorough/redirect.js
@@ -59,77 +59,76 @@
 
   // Do not redirect for other status even if Location header exists.
   [REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=POST&Status=201&' +
-   'NoRedirectTest=true',
+   '&mode=same-origin&method=POST&Status=201&NoRedirectTest=true',
    [fetchResolved, hasBody, typeBasic],
    [checkJsonpNoRedirect]],
 
   [REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=PUT',
+   '&mode=same-origin&method=PUT',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
    [methodIsPUT, authCheck1]],
 
   [REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM',
+   '&mode=cors&method=GET&headers=CUSTOM',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
    [methodIsGET, hasCustomHeader, authCheck1]],
 
   // Redirect: same origin -> other origin
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=GET',
+   '&mode=same-origin&method=GET',
    [fetchRejected]],
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=POST',
+   '&mode=same-origin&method=POST',
    [fetchRejected]],
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=PUT',
+   '&mode=same-origin&method=PUT',
    [fetchRejected]],
 
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET',
+   '&mode=cors&method=GET',
    [fetchRejected]],
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=PUT',
+   '&mode=cors&method=PUT',
    [fetchRejected]],
 
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=GET',
+   '&mode=cors&method=GET',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=PUT',
+   '&mode=cors&method=PUT',
    [fetchRejected]],
   [REDIRECT_URL +
    encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*&ACAMethods=PUT') +
-   '&mode=cors&credentials=same-origin&method=PUT',
+   '&mode=cors&method=PUT',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPUT, noCustomHeader, authCheckNone]],
 
   // Status code tests for mode="cors"
   // The 301 redirect response MAY change the request method from POST to GET.
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&Status=301',
+   '&mode=cors&method=POST&Status=301',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 302 redirect response MAY change the request method from POST to GET.
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&Status=302',
+   '&mode=cors&method=POST&Status=302',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // GET method must be used for 303 redirect.
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&Status=303',
+   '&mode=cors&method=POST&Status=303',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 307 redirect response MUST NOT change the method.
   [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&Status=307',
+   '&mode=cors&method=POST&Status=307',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPOST]],
   // The 308 redirect response MUST NOT change the method.
   // FIXME: disabled due to https://crbug.com/451938
   // [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
-  //  '&mode=cors&credentials=same-origin&method=POST&Status=308',
+  //  '&mode=cors&method=POST&Status=308',
   //  [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
   //  [methodIsPOST]],
 
@@ -139,54 +138,54 @@
      OTHER_BASE_URL +
      '&ACAOrigin=' + BASE_ORIGIN +
      '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader') +
-   '&mode=cors&credentials=same-origin&method=GET',
+   '&mode=cors&method=GET',
    [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
 
   // Redirect: other origin -> same origin
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=GET',
+   '&mode=same-origin&method=GET',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=same-origin&credentials=same-origin&method=POST',
+   '&mode=same-origin&method=POST',
    [fetchRejected]],
 
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET',
+   '&mode=cors&method=GET',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
 
   // Status code tests for mode="cors"
   // The 301 redirect response MAY change the request method from POST to GET.
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=301',
+   '&mode=cors&method=post&ACAOrigin=*&Status=301',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 302 redirect response MAY change the request method from POST to GET.
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=302',
+   '&mode=cors&method=post&ACAOrigin=*&Status=302',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // GET method must be used for 303 redirect.
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=303',
+   '&mode=cors&method=post&ACAOrigin=*&Status=303',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 307 redirect response MUST NOT change the method.
   [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=307',
+   '&mode=cors&method=post&ACAOrigin=*&Status=307',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPOST]],
   // The 308 redirect response MUST NOT change the method.
   // FIXME: disabled due to https://crbug.com/451938
   // [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
-  //  '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=308',
+  //  '&mode=cors&method=post&ACAOrigin=*&Status=308',
   //  [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
   //  [methodIsPOST]],
 
@@ -195,14 +194,14 @@
   // Custom method
   [OTHER_REDIRECT_URL +
    encodeURIComponent(BASE_URL + 'ACAOrigin=*&ACAMethods=PUT') +
-   '&mode=cors&credentials=same-origin&method=PUT&ACAOrigin=*&ACAMethods=PUT',
+   '&mode=cors&method=PUT&ACAOrigin=*&ACAMethods=PUT',
    [fetchRejected]],
   // Custom header
   [OTHER_REDIRECT_URL +
    encodeURIComponent(
        BASE_URL +
        'ACAOrigin=' + BASE_ORIGIN + '&ACAHeaders=x-serviceworker-test') +
-   '&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM&ACAOrigin=*',
+   '&mode=cors&method=GET&headers=CUSTOM&ACAOrigin=*',
    [fetchRejected]],
 
   // Redirect: other origin -> other origin
@@ -210,57 +209,55 @@
    '&mode=same-origin&method=GET',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET',
+   '&mode=cors&method=GET',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchRejected]],
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [OTHER_REDIRECT_URL +
    encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN + '') +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=' + BASE_ORIGIN + '',
+   '&mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN + '',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
   [OTHER_REDIRECT_URL +
    encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN + '') +
-   '&mode=cors&credentials=same-origin&method=GET' +
-   '&ACAOrigin=' + BASE_ORIGIN + '',
+   '&mode=cors&method=GET&ACAOrigin=' + BASE_ORIGIN + '',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
 
   // Status code tests for mode="cors"
   // The 301 redirect response MAY change the request method from POST to GET.
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=301',
+   '&mode=cors&method=POST&ACAOrigin=*&Status=301',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 302 redirect response MAY change the request method from POST to GET.
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=302',
+   '&mode=cors&method=POST&ACAOrigin=*&Status=302',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // GET method must be used for 303 redirect.
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=303',
+   '&mode=cors&method=POST&ACAOrigin=*&Status=303',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsGET]],
   // The 307 redirect response MUST NOT change the method.
   [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-   '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=307',
+   '&mode=cors&method=POST&ACAOrigin=*&Status=307',
    [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
    [methodIsPOST]],
   // The 308 redirect response MUST NOT change the method.
   // FIXME: disabled due to https://crbug.com/451938
   // [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
-  //  '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=308',
+  //  '&mode=cors&method=POST&ACAOrigin=*&Status=308',
   //  [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
   //  [methodIsPOST]],
 
@@ -268,7 +265,7 @@
   [OTHER_REDIRECT_URL +
    encodeURIComponent(OTHER_BASE_URL +
                       'ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader') +
-   '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
+   '&mode=cors&method=GET&ACAOrigin=*',
    [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
    [methodIsGET, authCheckNone]],
 
@@ -277,14 +274,14 @@
   // Custom method
   [OTHER_REDIRECT_URL +
    encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*&ACAMethods=PUT') +
-   '&mode=cors&credentials=same-origin&method=PUT&ACAOrigin=*&ACAMethods=PUT',
+   '&mode=cors&method=PUT&ACAOrigin=*&ACAMethods=PUT',
    [fetchRejected]],
   // Custom header
   [OTHER_REDIRECT_URL +
    encodeURIComponent(
      OTHER_BASE_URL +
      'ACAOrigin=' + BASE_ORIGIN + '&ACAHeaders=x-serviceworker-test') +
-   '&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM' +
+   '&mode=cors&method=GET&headers=CUSTOM' +
    '&ACAOrigin=' + BASE_ORIGIN + '&ACAHeaders=x-serviceworker-test',
    [fetchRejected]],
 ];
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/fetch-request-resources.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/fetch-request-resources.html
index 7b7947a..3ee299c 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/fetch-request-resources.html
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/fetch-request-resources.html
@@ -12,6 +12,7 @@
                     expected_mode, expected_credentials) {
   var actual_url = url + (++url_count);
   expected_results[actual_url] = {
+      cross_origin: cross_origin,
       mode: expected_mode,
       credentials: expected_credentials,
       redirect: 'follow',
@@ -25,6 +26,7 @@
                      expected_mode, expected_credentials) {
   var actual_url = url + (++url_count);
   expected_results[actual_url] = {
+      cross_origin: cross_origin,
       mode: expected_mode,
       credentials: expected_credentials,
       redirect: 'follow',
@@ -38,6 +40,7 @@
                   expected_mode, expected_credentials) {
   var actual_url = url + (++url_count);
   expected_results[actual_url] = {
+      cross_origin: cross_origin,
       mode: expected_mode,
       credentials: expected_credentials,
       redirect: 'follow',
@@ -86,33 +89,6 @@
   return frame.contentWindow.load_css_image_set(actual_url, type);
 }
 
-function fetch_test(frame, url, mode, credentials,
-                    expected_mode, expected_credentials) {
-  var actual_url = url + (++url_count);
-  expected_results[actual_url] = {
-      mode: expected_mode,
-      credentials: expected_credentials,
-      redirect: 'follow',
-      message: 'fetch (url:' + actual_url + ' mode:' + mode + ' credentials:' +
-               credentials + ')'
-    };
-  return frame.contentWindow.fetch(
-      new Request(actual_url, {mode: mode, credentials: credentials}));
-}
-
-function audio_test(frame, url, cross_origin,
-                    expected_mode, expected_credentials) {
-  var actual_url = url + (++url_count);
-  expected_results[actual_url] = {
-      mode: expected_mode,
-      credentials: expected_credentials,
-      redirect: 'follow',
-      message: 'Audio load (url:' + actual_url + ' cross_origin:' +
-               cross_origin + ')'
-    };
-  return frame.contentWindow.load_audio(actual_url, cross_origin);
-}
-
 async_test(function(t) {
     var SCOPE = 'resources/fetch-request-resources-iframe.html';
     var SCRIPT = 'resources/fetch-request-resources-worker.js';
@@ -167,69 +143,45 @@
       .then(function() { return with_iframe(SCOPE); })
       .then(function(f) {
         frame = f;
-        image_test(f, LOCAL_URL, '', 'no-cors', 'include');
+        image_test(f, LOCAL_URL, '', 'no-cors', 'same-origin');
         image_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
         image_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
-        image_test(f, REMOTE_URL, '', 'no-cors', 'include');
+        image_test(f, REMOTE_URL, '', 'no-cors', 'same-origin');
         image_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
         image_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');
 
-        script_test(f, LOCAL_URL, '', 'no-cors', 'include');
+        script_test(f, LOCAL_URL, '', 'no-cors', 'same-origin');
         script_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
         script_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
-        script_test(f, REMOTE_URL, '', 'no-cors', 'include');
+        script_test(f, REMOTE_URL, '', 'no-cors', 'same-origin');
         script_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
         script_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');
 
-        css_test(f, LOCAL_URL, '', 'no-cors', 'include');
+        css_test(f, LOCAL_URL, '', 'no-cors', 'same-origin');
         css_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
         css_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
-        css_test(f, REMOTE_URL, '', 'no-cors', 'include');
+        css_test(f, REMOTE_URL, '', 'no-cors', 'same-origin');
         css_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
         css_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');
 
         font_face_test(f, LOCAL_URL, 'cors', 'same-origin');
         font_face_test(f, REMOTE_URL, 'cors', 'same-origin');
 
-        css_image_test(f, LOCAL_URL, 'backgroundImage', 'no-cors', 'include');
-        css_image_test(f, REMOTE_URL, 'backgroundImage', 'no-cors', 'include');
+        css_image_test(f, LOCAL_URL, 'backgroundImage',
+                       'no-cors', 'same-origin');
+        css_image_test(f, REMOTE_URL, 'backgroundImage',
+                       'no-cors', 'same-origin');
         css_image_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin');
         css_image_test(f, REMOTE_URL, 'shapeOutside', 'cors', 'same-origin');
 
         css_image_set_test(f, LOCAL_URL, 'backgroundImage',
-                           'no-cors', 'include');
+                           'no-cors', 'same-origin');
         css_image_set_test(f, REMOTE_URL, 'backgroundImage',
-                           'no-cors', 'include');
+                           'no-cors', 'same-origin');
         css_image_set_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin');
         css_image_set_test(f, REMOTE_URL, 'shapeOutside',
                            'cors', 'same-origin');
 
-        fetch_test(f, LOCAL_URL, 'same-origin', 'omit', 'same-origin', 'omit');
-        fetch_test(f, LOCAL_URL, 'same-origin', 'same-origin',
-                   'same-origin', 'same-origin');
-        fetch_test(f, LOCAL_URL, 'same-origin', 'include',
-                   'same-origin', 'include');
-        fetch_test(f, LOCAL_URL, 'no-cors', 'omit', 'no-cors', 'omit');
-        fetch_test(f, LOCAL_URL, 'no-cors', 'same-origin',
-                   'no-cors', 'same-origin');
-        fetch_test(f, LOCAL_URL, 'no-cors', 'include', 'no-cors', 'include');
-        fetch_test(f, LOCAL_URL, 'cors', 'omit', 'cors', 'omit');
-        fetch_test(f, LOCAL_URL, 'cors', 'same-origin', 'cors', 'same-origin');
-        fetch_test(f, LOCAL_URL, 'cors', 'include', 'cors', 'include');
-        fetch_test(f, REMOTE_URL, 'no-cors', 'omit', 'no-cors', 'omit');
-        fetch_test(f, REMOTE_URL, 'no-cors', 'same-origin',
-                   'no-cors', 'same-origin');
-        fetch_test(f, REMOTE_URL, 'no-cors', 'include', 'no-cors', 'include');
-        fetch_test(f, REMOTE_URL, 'cors', 'omit', 'cors', 'omit');
-        fetch_test(f, REMOTE_URL, 'cors', 'same-origin', 'cors', 'same-origin');
-        fetch_test(f, REMOTE_URL, 'cors', 'include', 'cors', 'include');
-
-        audio_test(f, LOCAL_URL, '', 'no-cors', 'include');
-        audio_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
-        audio_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
-        audio_test(f, REMOTE_URL, '', 'no-cors', 'include');
-        audio_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
-        audio_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');
       })
       .catch(unreached_rejection(t));
   }, 'Verify FetchEvent for resources.');
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-resources-iframe.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-resources-iframe.html
index f13129c5..00c58386d 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-resources-iframe.html
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-resources-iframe.html
@@ -48,13 +48,5 @@
   div.style[type] = '-webkit-image-set(url(' + url + ') 1x)';
 }
 
-function load_audio(url, cross_origin) {
-  var audio = document.createElement('audio');
-  if (cross_origin != '') {
-    audio.crossOrigin = cross_origin;
-  }
-  audio.src = url;
-  document.body.appendChild(audio);
-}
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-xhr-iframe.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-xhr-iframe.html
index b485ee2..c16cc5dc 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-xhr-iframe.html
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/fetch-request-xhr-iframe.html
@@ -133,7 +133,7 @@
   return xhr_send(host_info['HTTP_ORIGIN'], 'GET', '', false)
     .then(function(response){
         assert_equals(response.mode, 'cors');
-        assert_equals(response.credentials, 'include');
+        assert_equals(response.credentials, 'same-origin');
         return xhr_send(host_info['HTTP_ORIGIN'], 'GET', '', true);
       })
     .then(function(response){
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 4ff27470d..ed5edb8c 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
@@ -471,7 +471,7 @@
     getter action
     getter notification
     method constructor
-interface OffscreenCanvasTemp
+interface OffscreenCanvas
     getter height
     getter width
     method constructor
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/resources/echo-query.php b/third_party/WebKit/LayoutTests/http/tests/svg/resources/echo-query.php
new file mode 100644
index 0000000..8659ce9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/svg/resources/echo-query.php
@@ -0,0 +1,4 @@
+<?php
+header('Content-Type:' . $_GET['type']);
+echo $_GET['payload'];
+?>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/resources/object-svg.html b/third_party/WebKit/LayoutTests/http/tests/svg/resources/object-svg.html
new file mode 100644
index 0000000..55a490a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/svg/resources/object-svg.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<style>
+body {
+  margin: 0;
+}
+</style>
+<script>
+function notifyParent(message) {
+  parent.postMessage(message, '*');
+}
+</script>
+<object data="greenSquare.svg" type="image/svg+xml" width="100" height="200"
+        onload="notifyParent('load')" onerror="notifyParent('error')">
+  FAIL
+</object>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/svg-in-object-in-sandboxed-iframe.html b/third_party/WebKit/LayoutTests/http/tests/svg/svg-in-object-in-sandboxed-iframe.html
new file mode 100644
index 0000000..b097a71fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/svg/svg-in-object-in-sandboxed-iframe.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+var t = async_test("SVG in <object> in sandboxed <iframe> is not blocked.");
+onmessage = t.step_func_done(function(message) {
+  assert_equals(message.data, 'load');
+  var iframe = document.querySelector('iframe');
+  var containedObject = iframe.contentDocument.querySelector('object');
+  var svgRoot = containedObject.contentDocument.documentElement;
+  assert_equals(svgRoot.localName, "svg");
+  assert_equals(svgRoot.namespaceURI, "http://www.w3.org/2000/svg");
+});
+</script>
+<iframe sandbox="allow-same-origin allow-scripts" src="resources/object-svg.html"
+        style="border: none; margin: 0"
+        scrolling="no"></iframe>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/use-contenttype-blocked.html b/third_party/WebKit/LayoutTests/http/tests/svg/use-contenttype-blocked.html
new file mode 100644
index 0000000..5c2fab1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/svg/use-contenttype-blocked.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg>
+  <rect width="100" height="100" fill="green"/>
+  <use xlink:href="resources/echo-query.php?type=application/json&payload=%3C%3Fxml%20version%3D%271.0%27%3F%3E%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Crect%20id%3D%27rectangle%27%20width%3D%27100%27%20height%3D%27100%27%20fill%3D%27red%27/%3E%3C/svg%3E#rectangle">
+    <script>
+      var t = async_test("Unrecognized Content-Type for external &lt;use> is blocked.");
+      var useElement = document.querySelector('use');
+      useElement.onerror = t.step_func_done();
+      useElement.onload = t.unreached_func();
+    </script>
+  </use>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/use-no-contenttype-blocked.html b/third_party/WebKit/LayoutTests/http/tests/svg/use-no-contenttype-blocked.html
new file mode 100644
index 0000000..7c1bac4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/svg/use-no-contenttype-blocked.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg>
+  <rect width="100" height="100" fill="green"/>
+  <use xlink:href="resources/echo-query.php?payload=%3C%3Fxml%20version%3D%271.0%27%3F%3E%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Crect%20id%3D%27rectangle%27%20width%3D%27100%27%20height%3D%27100%27%20fill%3D%27red%27/%3E%3C/svg%3E#rectangle">
+    <script>
+      var t = async_test("No Content-Type for external &lt;use> is blocked.");
+      var useElement = document.querySelector('use');
+      useElement.onerror = t.step_func_done();
+      useElement.onload = t.unreached_func();
+    </script>
+  </use>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_pause_manual-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_pause_manual-expected.txt
index 07a3012..2aea92f 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_pause_manual-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_pause_manual-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 calling play() then pause() on non-autoplay video should trigger pause event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_play_manual-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_play_manual-expected.txt
index d20f707b..567b44d3 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_play_manual-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/audio/events/event_play_manual-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 calling play() on video should trigger play event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/W3C/audio/paused/paused_true_during_pause-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
index c39bb39..4f57da11 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 audio.paused should be true during pause event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/W3C/video/events/event_pause_manual-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/video/events/event_pause_manual-expected.txt
index 07a3012..2aea92f 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/video/events/event_pause_manual-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/video/events/event_pause_manual-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 calling play() then pause() on non-autoplay video should trigger pause event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/W3C/video/events/event_play_manual-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/video/events/event_play_manual-expected.txt
index d20f707b..567b44d3 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/video/events/event_play_manual-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/video/events/event_play_manual-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 calling play() on video should trigger play event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/W3C/video/paused/paused_true_during_pause-expected.txt b/third_party/WebKit/LayoutTests/media/W3C/video/paused/paused_true_during_pause-expected.txt
index 3e6cbb2..e2723f2 100644
--- a/third_party/WebKit/LayoutTests/media/W3C/video/paused/paused_true_during_pause-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/W3C/video/paused/paused_true_during_pause-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 video.paused should be true during pause event
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/media/media-play-promise-expected.txt b/third_party/WebKit/LayoutTests/media/media-play-promise-expected.txt
new file mode 100644
index 0000000..3a78c52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/media-play-promise-expected.txt
@@ -0,0 +1,171 @@
+CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+Test the play() behaviour with regards to the returned promise for media elements.
+
+
+playBeforeCanPlay()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EXPECTED (mediaElement.readyState == '0') OK
+play()
+EVENT(loadedmetadata)
+EVENT(loadeddata)
+EVENT(canplay)
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playWhenCanPlay()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(canplay)
+EXPECTED (mediaElement.readyState >= '3') OK
+EXPECTED (mediaElement.paused == 'true') OK
+play()
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playAfterPlaybackStarted()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(canplaythrough)
+RUN(mediaElement.play())
+EVENT(playing)
+EXPECTED (mediaElement.readyState == '4') OK
+EXPECTED (mediaElement.paused == 'false') OK
+play()
+arguments.length: 1
+Promise resolved with undefined
+
+playRequiresUserGestureAndHasIt()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+play()
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playRequiresUserGestureAndDoesNotHaveIt()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+play()
+arguments.length: 1
+Promise failed with NotAllowedError: play() can only be initiated by a user gesture.
+
+playNotSupportedContent()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'data:,.wav')
+play()
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '4') OK
+arguments.length: 1
+Promise failed with NotSupportedError: Failed to load because no supported source was found.
+
+playDecodeError()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(loadedmetadata)
+play()
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '3') OK
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playNetworkError()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(loadedmetadata)
+play()
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '2') OK
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playWithErrorAlreadySet()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'data:,.wav')
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '4') OK
+play()
+arguments.length: 1
+Promise failed with NotSupportedError: The element has no supported sources.
+
+playSrcChangedAfterError()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'data:,.wav')
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '4') OK
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(loadedmetadata)
+play()
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playRaceWithSrcChangeError()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'data:,.wav')
+EVENT(error)
+EXPECTED (mediaElement.error == '[object MediaError]') OK
+EXPECTED (mediaElement.error.code == '4') OK
+RUN(mediaElement.src = 'content/test.wav')
+EXPECTED (mediaElement.error == 'null') OK
+EXPECTED (mediaElement.readyState == '0') OK
+play()
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playAndPauseWhenCanPlay()
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'content/test.wav')
+EVENT(canplaythrough)
+EXPECTED (mediaElement.readyState == '4') OK
+play()
+EXPECTED (mediaElement.paused == 'false') OK
+EXPECTED (mediaElement.paused == 'true') OK
+EVENT(playing)
+arguments.length: 1
+Promise resolved with undefined
+
+playAndPauseBeforeCanPlay()
+RUN(mediaElement = document.createElement('audio'))
+EXPECTED (mediaElement.readyState == '0') OK
+play()
+EXPECTED (mediaElement.paused == 'false') OK
+EXPECTED (mediaElement.paused == 'true') OK
+arguments.length: 1
+Promise failed with AbortError: The play() request was interrupted by a call to pause().
+
+loadRejectsPendingPromises()
+RUN(mediaElement = document.createElement('audio'))
+play()
+RUN(mediaElement.load())
+arguments.length: 1
+Promise failed with AbortError: The play() request was interrupted by a new load request.
+
+newSrcRejectPendingPromises()
+RUN(mediaElement = document.createElement('audio'))
+play()
+RUN(mediaElement.src = 'content/test.wav')
+arguments.length: 1
+Promise failed with AbortError: The play() request was interrupted by a new load request.
+
+testEventAndPromiseOrdering
+RUN(mediaElement = document.createElement('audio'))
+RUN(mediaElement.src = 'data:,')
+EVENT(error)
+RUN(mediaElement.volume = 0.1)
+play()
+RUN(mediaElement.volume = 0.2)
+arguments.length: 1
+Promise failed with NotSupportedError: The element has no supported sources.
+END OF TEST
+
diff --git a/third_party/WebKit/LayoutTests/media/media-play-promise.html b/third_party/WebKit/LayoutTests/media/media-play-promise.html
new file mode 100644
index 0000000..77b4ac7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/media-play-promise.html
@@ -0,0 +1,414 @@
+<html>
+<head>
+<script src=media-file.js></script>
+<!-- TODO(mlamouri): use testharness.js, see https://crbug.com/588956 -->
+<script src=video-test.js></script>
+
+<script>
+    // This is testing the behavior of play() with regards to the returned
+    // promise. This test file is creating a small framework in order to be able
+    // to test different cases easily and independently of each other.
+    //
+    // All tests have to be part of the TESTS array. When the page is loaded,
+    // first function in the array is run. A test is considered done when the
+    // promise returned by mediaElement.play() is resolved or rejected. Each
+    // test then needs to call play() once which wraps this logic. When a test
+    // is finished, the next test in the array is run until the entire array
+    // was processed.
+    //
+    // Each test should start by printing its name in order to facilitate reading
+    // the output.
+
+    function runNextTestOrFinish()
+    {
+        currentTest++;
+        if (currentTest >= TESTS.length) {
+            endTest();
+            return;
+        }
+
+        consoleWrite("");
+        TESTS[currentTest]();
+    }
+
+    function play()
+    {
+        consoleWrite("play()");
+        mediaElement.play().then(function() {
+            consoleWrite("arguments.length: " + arguments.length);
+            consoleWrite("Promise resolved with " + arguments[0]);
+        }, function(e) {
+            consoleWrite("arguments.length: " + arguments.length);
+            consoleWrite("Promise failed with " + e.name + ": " + e.message);
+        }).then(runNextTestOrFinish);
+    }
+
+    function playWithUserGesture()
+    {
+        var target = document.querySelector("p");
+        target.onclick = function() {
+            play();
+            target.onclick = null;
+        };
+
+        var boundingRect = target.getBoundingClientRect();
+        var x = boundingRect.left + (boundingRect.width / 2);
+        var y = boundingRect.top + (boundingRect.height / 2);
+
+        // Assuming running in Blink LayoutTests.
+        eventSender.mouseMoveTo(x, y);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    }
+
+    var currentTest = -1;
+
+    var TESTS = [
+        // Test that play() on an element that doesn't have enough data will
+        // return a promise that resolves successfuly.
+        function playBeforeCanPlay()
+        {
+            consoleWrite("playBeforeCanPlay()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('loadedmetadata');
+            waitForEvent('loadeddata');
+            waitForEvent('canplay');
+            waitForEvent('playing');
+
+            testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHING);
+            play();
+        },
+
+        // Test that play() on an element that has enough data will return a
+        // promise that resolves successfuly.
+        function playWhenCanPlay()
+        {
+            consoleWrite("playWhenCanPlay()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+
+            waitForEvent('canplay', function() {
+                testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_FUTURE_DATA, ">=");
+                testExpected("mediaElement.paused", true);
+
+                play();
+            });
+        },
+
+        function playAfterPlaybackStarted()
+        {
+            consoleWrite("playAfterPlaybackStarted()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            mediaElement.preload = "auto";
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing', function() {
+                testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_ENOUGH_DATA);
+                testExpected("mediaElement.paused", false);
+
+                play();
+            });
+
+            waitForEvent('canplaythrough', function() {
+                run("mediaElement.play()");
+            });
+        },
+
+        // Test that play() on an element when media playback requires a gesture
+        // returns a resolved promise if there is a user gesture.
+        function playRequiresUserGestureAndHasIt()
+        {
+            consoleWrite("playRequiresUserGestureAndHasIt()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(true);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            playWithUserGesture();
+        },
+
+        // Test that play() on an element when media playback requires a gesture
+        // returns a rejected promise if there is no user gesture.
+        function playRequiresUserGestureAndDoesNotHaveIt()
+        {
+            consoleWrite("playRequiresUserGestureAndDoesNotHaveIt()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(true);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            play();
+        },
+
+        // Test that play() on an element with an unsupported content will
+        // return a rejected promise.
+        function playNotSupportedContent()
+        {
+            consoleWrite("playNotSupportedContent()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "data:,");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
+            });
+            play();
+        },
+
+        // Test that play() returns a resolved promise if called after the
+        // element suffered from a decode error.
+        // This test doesn't test a spec behaviour but tests that the Blink
+        // implementation properly changed after the spec changed.
+        function playDecodeError()
+        {
+            consoleWrite("playDecodeError()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_DECODE);
+            });
+
+            // The setMediaElementNetworkState() method requires metadata to be
+            // available.
+            waitForEvent('loadedmetadata', function() {
+              internals.setMediaElementNetworkState(mediaElement, 6 /* NetworkStateDecodeError */);
+              play();
+            });
+        },
+
+        // Test that play() returns a resolved promise if called after the
+        // element suffered from a network error.
+        // This test doesn't test a spec behaviour but tests that the Blink
+        // implementation properly changed after the spec changed
+        function playNetworkError()
+        {
+            consoleWrite("playNetworkError()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_NETWORK);
+            });
+
+            // The setMediaElementNetworkState() method requires metadata to be
+            // available.
+            waitForEvent('loadedmetadata', function() {
+              internals.setMediaElementNetworkState(mediaElement, 5 /* NetworkStateNetworkError */);
+              play();
+            });
+        },
+
+        // Test that play() returns a rejected promise if the element is
+        // suferring from a not supported error.
+        function playWithErrorAlreadySet()
+        {
+            consoleWrite("playWithErrorAlreadySet()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "data:,");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('playing');
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
+                play();
+            });
+        },
+
+        // Test that play() returns a resolved promise if the element had its
+        // source changed after suffering from an error.
+        function playSrcChangedAfterError()
+        {
+            consoleWrite("playSrcChangedAfterError()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "data:,");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
+
+                mediaFile = findMediaFile("audio", "content/test");
+                run("mediaElement.src = '" + mediaFile + "'");
+
+                waitForEvent('playing');
+                waitForEvent('loadedmetadata', function() {
+                    play();
+                });
+            });
+        },
+
+        // Test that play() returns a rejected promise if the element had an
+        // error and just changed its source.
+        function playRaceWithSrcChangeError()
+        {
+            consoleWrite("playRaceWithSrcChangeError()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "data:,");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('error', function() {
+                testExpected("mediaElement.error", "[object MediaError]");
+                testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
+
+                mediaFile = findMediaFile("audio", "content/test");
+                run("mediaElement.src = '" + mediaFile + "'");
+
+                testExpected("mediaElement.error", null);
+                testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHING);
+
+                waitForEvent('playing');
+                play();
+            });
+        },
+
+        // Test that play() returns a resolved promise when calling play() then
+        // pause() on an element that already has enough data to play. In other
+        // words, pause() doesn't cancel play() because it was resolved
+        // immediately.
+        function playAndPauseWhenCanPlay()
+        {
+            consoleWrite("playAndPauseWhenCanPlay()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+
+            waitForEvent('canplaythrough', function() {
+                waitForEvent('playing');
+                testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_ENOUGH_DATA);
+                play();
+                testExpected("mediaElement.paused", false);
+                mediaElement.pause();
+                testExpected("mediaElement.paused", true);
+            });
+        },
+
+        // Test that play() returns a rejected promise when calling play() then
+        // pause() on an element that doesn't have enough data to play. In other
+        // words, pause() cancels play() before it can be resolved.
+        function playAndPauseBeforeCanPlay()
+        {
+            consoleWrite("playAndPauseBeforeCanPlay()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+
+            waitForEvent('playing');
+            testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHING);
+            play();
+            testExpected("mediaElement.paused", false);
+            mediaElement.pause();
+            testExpected("mediaElement.paused", true);
+        },
+
+        // Test that load() rejects all the pending play() promises.
+        // This might be tested by other tests in this file but it is present in
+        // order to be explicit.
+        function loadRejectsPendingPromises()
+        {
+            consoleWrite("loadRejectsPendingPromises()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+
+            play(); // the promise will be left pending.
+
+            waitForEvent('playing');
+            run("mediaElement.load()");
+        },
+
+        // Test that changing the src rejects the pending play() promises.
+        function newSrcRejectPendingPromises()
+        {
+            consoleWrite("newSrcRejectPendingPromises()");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+
+            play(); // the promise will be left pending.
+
+            var mediaFile = findMediaFile("audio", "content/test");
+            run("mediaElement.src = '" + mediaFile + "'");
+        },
+
+        // Test ordering of events and promises.
+        // This is testing a bug in Blink, see https://crbug.com/587871
+        function testEventAndPromiseOrdering()
+        {
+            consoleWrite("testEventAndPromiseOrdering");
+            internals.settings.setMediaPlaybackRequiresUserGesture(false);
+
+            run("mediaElement = document.createElement('audio')");
+            run("mediaElement.src = 'data:,'");
+
+            waitForEvent('error', function() {
+                // Until https://crbug.com/587871 is fixed, the events will be
+                // [ volumechange, volumechange, promise ], it should be
+                // [ volumechange, promise, volumechange ].
+                waitForEvent('volumechange');
+                run("mediaElement.volume = 0.1");
+                play();
+                run("mediaElement.volume = 0.2");
+            });
+
+        }
+    ];
+
+    function start()
+    {
+        if (!('eventSender' in window) || !('internals' in window)) {
+            failTest("Not running in LayoutTests.");
+            return;
+        }
+        runNextTestOrFinish();
+    }
+
+</script>
+</head>
+
+<body onload="start()">
+
+<p>Test the play() behaviour with regards to the returned promise for media elements.</p>
+
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/track/track-cues-pause-on-exit-expected.txt b/third_party/WebKit/LayoutTests/media/track/track-cues-pause-on-exit-expected.txt
index 7fd3e15..4deaded5 100644
--- a/third_party/WebKit/LayoutTests/media/track/track-cues-pause-on-exit-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/track/track-cues-pause-on-exit-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Tests that the video is paused after cues that have pause-on-exit flag are processed
 
 EVENT(canplaythrough)
diff --git a/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt b/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt
index 3845760..50001c2 100644
--- a/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes-expected.txt
@@ -1,10 +1,17 @@
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 141: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 END OF TEST
   Check if the autoplay gesture override experiment works.  There are a lot
   of config options, so this test just runs all of them.
diff --git a/third_party/WebKit/LayoutTests/media/video-controls-overlay-play-button-expected.txt b/third_party/WebKit/LayoutTests/media/video-controls-overlay-play-button-expected.txt
index 277b5db..eb10c6a2 100644
--- a/third_party/WebKit/LayoutTests/media/video-controls-overlay-play-button-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-controls-overlay-play-button-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Test that the overlay play button respects the controls attribute
 
 EXPECTED (getComputedStyle(button).display == 'flex') OK
diff --git a/third_party/WebKit/LayoutTests/media/video-display-none-crash-expected.txt b/third_party/WebKit/LayoutTests/media/video-display-none-crash-expected.txt
index bf05d5c..780cd0e 100644
--- a/third_party/WebKit/LayoutTests/media/video-display-none-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-display-none-crash-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Test that pause() after changing display to "none" doesn't cause a crash.
 
 END OF TEST
diff --git a/third_party/WebKit/LayoutTests/media/video-play-pause-events-expected.txt b/third_party/WebKit/LayoutTests/media/video-play-pause-events-expected.txt
index fe3f8451..b2d1b07 100644
--- a/third_party/WebKit/LayoutTests/media/video-play-pause-events-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-play-pause-events-expected.txt
@@ -1,3 +1,4 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Test that calling play() and pause() triggers async play, timeupdate and pause events.
 
 RUN(video.play())
diff --git a/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture-expected.txt b/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture-expected.txt
index 734bd91..b29ea2b 100644
--- a/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-play-require-user-gesture-expected.txt
@@ -1,4 +1,5 @@
 CONSOLE WARNING: Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.
+CONSOLE ERROR: line 1: Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.
 Test that video play() does not work unless a user clicked on the play button.
 
 EVENT(canplaythrough)
diff --git a/third_party/WebKit/LayoutTests/media/video-played-collapse-expected.txt b/third_party/WebKit/LayoutTests/media/video-played-collapse-expected.txt
index 02533c6..7af7151 100644
--- a/third_party/WebKit/LayoutTests/media/video-played-collapse-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-played-collapse-expected.txt
@@ -1,3 +1,6 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Test of the media element 'played' attribute
 
 EVENT(loadstart)
diff --git a/third_party/WebKit/LayoutTests/media/video-played-ranges-1-expected.txt b/third_party/WebKit/LayoutTests/media/video-played-ranges-1-expected.txt
index eeb5fd0..9bcc4894 100644
--- a/third_party/WebKit/LayoutTests/media/video-played-ranges-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-played-ranges-1-expected.txt
@@ -1,3 +1,7 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause().
 Test of the media element 'played' attribute, ranges part 1.
 
 EVENT(loadstart)
diff --git a/third_party/WebKit/LayoutTests/media/video-preload-expected.txt b/third_party/WebKit/LayoutTests/media/video-preload-expected.txt
index 2f90a289..d78fe4c 100644
--- a/third_party/WebKit/LayoutTests/media/video-preload-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/video-preload-expected.txt
@@ -1,3 +1,5 @@
+CONSOLE ERROR: line 116: Uncaught (in promise) AbortError: The play() request was interrupted by a new load request.
+CONSOLE ERROR: line 116: Uncaught (in promise) AbortError: The play() request was interrupted by a new load request.
 Test to see if media loads automatically when 'preload' is specified.
 
 
diff --git a/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events-expected.txt b/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events-expected.txt
index 01285e5..82bd0ce 100644
--- a/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events-expected.txt
@@ -92,7 +92,7 @@
 PASS receivedPEsAtTarget.length is 5
 green received pointermove at phase=target
 PASS receivedPEsAtTarget[5].isPrimary is true
-PASS receivedPEsAtTarget[5].button is 0
+PASS receivedPEsAtTarget[5].button is -1
 PASS receivedPEsAtTarget[5].buttons is 1
 PASS receivedPEsAtTarget[5].clientX is 168
 PASS receivedPEsAtTarget[5].clientY is 176
diff --git a/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events.html b/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events.html
index 953fe2a..cb32a21 100644
--- a/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events.html
+++ b/third_party/WebKit/LayoutTests/virtual/pointerevent/fast/events/pointerevents/touch-pointer-events.html
@@ -86,7 +86,7 @@
   eventSender.updateTouchPoint(0, x+20, y+20);
   eventSender.touchMove();
   shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
-  shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].button", 0);
+  shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].button", -1);
   shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].buttons", 1);
   shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientX", x+20);
   shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientY", y+20);
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 21a72e7..d49a5a37 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
@@ -446,7 +446,7 @@
 [Worker]     setter onclose
 [Worker]     setter onerror
 [Worker]     setter onshow
-[Worker] interface OffscreenCanvasTemp
+[Worker] interface OffscreenCanvas
 [Worker]     getter height
 [Worker]     getter width
 [Worker]     method constructor
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 92fe5643..5241199 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -3689,7 +3689,7 @@
     method startRendering
     method suspend
     setter oncomplete
-interface OffscreenCanvasTemp
+interface OffscreenCanvas
     getter height
     getter width
     method constructor
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 17cc445..d290277 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
@@ -434,7 +434,7 @@
 [Worker]     setter onclose
 [Worker]     setter onerror
 [Worker]     setter onshow
-[Worker] interface OffscreenCanvasTemp
+[Worker] interface OffscreenCanvas
 [Worker]     getter height
 [Worker]     getter width
 [Worker]     method constructor
diff --git a/third_party/WebKit/PRESUBMIT.py b/third_party/WebKit/PRESUBMIT.py
index 8d073343..af04a8a 100644
--- a/third_party/WebKit/PRESUBMIT.py
+++ b/third_party/WebKit/PRESUBMIT.py
@@ -8,6 +8,7 @@
 for more details about the presubmit API built into gcl.
 """
 
+import re
 import sys
 
 
@@ -113,11 +114,15 @@
 
 
 def _CheckStyle(input_api, output_api):
+    # Files that follow Chromium's coding style do not include capital letters.
+    re_chromium_style_file = re.compile(r'\b[a-z_]+\.(cc|h)$')
     style_checker_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
         'Tools', 'Scripts', 'check-webkit-style')
     args = ([input_api.python_executable, style_checker_path, '--diff-files']
             + [input_api.os_path.join('..', '..', f.LocalPath())
-               for f in input_api.AffectedFiles()])
+               for f in input_api.AffectedFiles()
+               # Filter out files that follow Chromium's coding style.
+               if not re_chromium_style_file.search(f.LocalPath())])
     results = []
 
     try:
diff --git a/third_party/WebKit/Source/DEPS b/third_party/WebKit/Source/DEPS
index 4660f28..9a0bbf9 100644
--- a/third_party/WebKit/Source/DEPS
+++ b/third_party/WebKit/Source/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+    "+base/macros.h",
     "+base/gtest_prod_util.h",
     "+testing/gmock/include/gmock",
     "+testing/gtest/include/gtest",
diff --git a/third_party/WebKit/Source/bindings/IDLExtendedAttributes.txt b/third_party/WebKit/Source/bindings/IDLExtendedAttributes.txt
index 36c5ed8..8b1d748f 100644
--- a/third_party/WebKit/Source/bindings/IDLExtendedAttributes.txt
+++ b/third_party/WebKit/Source/bindings/IDLExtendedAttributes.txt
@@ -31,7 +31,6 @@
 #       arbitrary, but that "X" is standard, e.g. [Attr=X], [Attr=Foo].
 #
 
-ActiveDOMObject
 CachedAttribute=*
 CallWith=ExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
 CheckSecurity=Receiver|ReturnValue
diff --git a/third_party/WebKit/Source/bindings/core/v8/NPV8Object.cpp b/third_party/WebKit/Source/bindings/core/v8/NPV8Object.cpp
index c60f1b9..a24ec20 100644
--- a/third_party/WebKit/Source/bindings/core/v8/NPV8Object.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/NPV8Object.cpp
@@ -60,7 +60,7 @@
 
 const WrapperTypeInfo* npObjectTypeInfo()
 {
-    static const WrapperTypeInfo typeInfo = { gin::kEmbedderBlink, 0, 0, 0, trace, 0, 0, 0, 0, "NPObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+    static const WrapperTypeInfo typeInfo = { gin::kEmbedderBlink, 0, 0, 0, trace, 0, 0, 0, "NPObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
     return &typeInfo;
 }
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
index 67914660..7fb4f48 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
@@ -173,16 +173,19 @@
         v8::Local<v8::Object> wrapper = v8::Local<v8::Object>::New(m_isolate, v8::Persistent<v8::Object>::Cast(*value));
         ASSERT(V8DOMWrapper::hasInternalFieldsSet(wrapper));
 
-        if (value->IsIndependent())
-            return;
-
         const WrapperTypeInfo* type = toWrapperTypeInfo(wrapper);
-
         if (type != npObjectTypeInfo() && toScriptWrappable(wrapper)->hasPendingActivity()) {
+            // If you hit this assert, you'll need to add a [DependentiLifetime]
+            // extended attribute to the DOM interface. A DOM interface that
+            // overrides hasPendingActivity must be marked as [DependentiLifetime].
+            RELEASE_ASSERT(!value->IsIndependent());
             m_isolate->SetObjectGroupId(*value, liveRootId());
             ++m_domObjectsWithPendingActivity;
         }
 
+        if (value->IsIndependent())
+            return;
+
         if (classId == WrapperTypeInfo::NodeClassId) {
             ASSERT(V8Node::hasInstance(wrapper, m_isolate));
             Node* node = V8Node::toImpl(wrapper);
diff --git a/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h b/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
index 6efa0568..490eeac0 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
+++ b/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
@@ -39,7 +39,6 @@
 
 namespace blink {
 
-class ActiveDOMObject;
 class EventTarget;
 class ScriptWrappable;
 
@@ -55,7 +54,6 @@
 typedef void (*RefObjectFunction)(ScriptWrappable*);
 typedef void (*DerefObjectFunction)(ScriptWrappable*);
 typedef void (*TraceFunction)(Visitor*, ScriptWrappable*);
-typedef ActiveDOMObject* (*ToActiveDOMObjectFunction)(v8::Local<v8::Object>);
 typedef void (*ResolveWrapperReachabilityFunction)(v8::Isolate*, ScriptWrappable*, const v8::Persistent<v8::Object>&);
 typedef void (*PreparePrototypeAndInterfaceObjectFunction)(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Function>, v8::Local<v8::FunctionTemplate>);
 typedef void (*InstallConditionallyEnabledPropertiesFunction)(v8::Local<v8::Object>, v8::Isolate*);
@@ -183,13 +181,6 @@
             installConditionallyEnabledPropertiesFunction(prototypeObject, isolate);
     }
 
-    ActiveDOMObject* toActiveDOMObject(v8::Local<v8::Object> object) const
-    {
-        if (!toActiveDOMObjectFunction)
-            return 0;
-        return toActiveDOMObjectFunction(object);
-    }
-
     EventTarget* toEventTarget(v8::Local<v8::Object>) const;
 
     void visitDOMWrapper(v8::Isolate* isolate, ScriptWrappable* scriptWrappable, const v8::Persistent<v8::Object>& wrapper) const
@@ -207,7 +198,6 @@
     const RefObjectFunction refObjectFunction;
     const DerefObjectFunction derefObjectFunction;
     const TraceFunction traceFunction;
-    const ToActiveDOMObjectFunction toActiveDOMObjectFunction;
     const ResolveWrapperReachabilityFunction visitDOMWrapperFunction;
     PreparePrototypeAndInterfaceObjectFunction preparePrototypeAndInterfaceObjectFunction;
     const InstallConditionallyEnabledPropertiesFunction installConditionallyEnabledPropertiesFunction;
diff --git a/third_party/WebKit/Source/bindings/scripts/compute_interfaces_info_overall.py b/third_party/WebKit/Source/bindings/scripts/compute_interfaces_info_overall.py
index 380510d..f038b765 100755
--- a/third_party/WebKit/Source/bindings/scripts/compute_interfaces_info_overall.py
+++ b/third_party/WebKit/Source/bindings/scripts/compute_interfaces_info_overall.py
@@ -89,7 +89,6 @@
 from utilities import idl_filename_to_component, read_pickle_files, write_pickle_file, merge_dict_recursively
 
 INHERITED_EXTENDED_ATTRIBUTES = set([
-    'ActiveDOMObject',
     'DependentLifetime',
     'GarbageCollected',
     'WillBeGarbageCollected',
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_interface.py b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
index f003601..35edaee 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_interface.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
@@ -108,9 +108,6 @@
             'bindings/core/v8/V8Float64Array.h',
             'bindings/core/v8/V8DataView.h'))
 
-    # [ActiveDOMObject]
-    is_active_dom_object = 'ActiveDOMObject' in extended_attributes
-
     # [CheckSecurity]
     is_check_security = 'CheckSecurity' in extended_attributes
     if is_check_security:
@@ -180,7 +177,6 @@
         'has_visit_dom_wrapper': has_visit_dom_wrapper,
         'header_includes': header_includes,
         'interface_name': interface.name,
-        'is_active_dom_object': is_active_dom_object,
         'is_array_buffer_or_view': is_array_buffer_or_view,
         'is_check_security': is_check_security,
         'is_event_target': is_event_target,
@@ -189,11 +185,7 @@
         'is_node': inherits_interface(interface.name, 'Node'),
         'is_partial': interface.is_partial,
         'is_typed_array_type': is_typed_array_type,
-        'lifetime': 'Dependent'
-            if (has_visit_dom_wrapper or
-                is_active_dom_object or
-                is_dependent_lifetime)
-            else 'Independent',
+        'lifetime': 'Dependent' if (has_visit_dom_wrapper or is_dependent_lifetime) else 'Independent',
         'measure_as': v8_utilities.measure_as(interface, None),  # [MeasureAs]
         'origin_trial_name': v8_utilities.origin_trial_name(interface),
         'parent_interface': parent_interface,
diff --git a/third_party/WebKit/Source/bindings/templates/interface.cpp b/third_party/WebKit/Source/bindings/templates/interface.cpp
index 344b798b..80c6919 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.cpp
+++ b/third_party/WebKit/Source/bindings/templates/interface.cpp
@@ -456,15 +456,13 @@
 {% block named_constructor %}
 {% from 'methods.cpp' import generate_constructor with context %}
 {% if named_constructor %}
-{% set to_active_dom_object = '%s::toActiveDOMObject' % v8_class
-                              if is_active_dom_object else '0' %}
 // Suppress warning: global constructors, because struct WrapperTypeInfo is trivial
 // and does not depend on another global objects.
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::refObject, {{v8_class}}::derefObject, {{v8_class}}::trace, {{to_active_dom_object}}, 0, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}}, WrapperTypeInfo::{{gc_type}} };
+const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::refObject, {{v8_class}}::derefObject, {{v8_class}}::trace, 0, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}}, WrapperTypeInfo::{{gc_type}} };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -908,18 +906,6 @@
 
 
 {##############################################################################}
-{% block to_active_dom_object %}
-{% if is_active_dom_object %}
-ActiveDOMObject* {{v8_class}}::toActiveDOMObject(v8::Local<v8::Object> wrapper)
-{
-    return toImpl(wrapper);
-}
-
-{% endif %}
-{% endblock %}
-
-
-{##############################################################################}
 {% block ref_object_and_deref_object %}
 void {{v8_class}}::refObject(ScriptWrappable* scriptWrappable)
 {
diff --git a/third_party/WebKit/Source/bindings/templates/interface.h b/third_party/WebKit/Source/bindings/templates/interface.h
index 091bb29..1250bdc 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.h
+++ b/third_party/WebKit/Source/bindings/templates/interface.h
@@ -75,9 +75,6 @@
     {% if has_visit_dom_wrapper %}
     static void visitDOMWrapper(v8::Isolate*, ScriptWrappable*, const v8::Persistent<v8::Object>&);
     {% endif %}
-    {% if is_active_dom_object %}
-    static ActiveDOMObject* toActiveDOMObject(v8::Local<v8::Object>);
-    {% endif %}
     {% for method in methods %}
     {% if method.is_custom %}
     static void {{method.name}}MethodCustom(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/WebKit/Source/bindings/templates/interface_base.cpp b/third_party/WebKit/Source/bindings/templates/interface_base.cpp
index 69ea7a8..f624935 100644
--- a/third_party/WebKit/Source/bindings/templates/interface_base.cpp
+++ b/third_party/WebKit/Source/bindings/templates/interface_base.cpp
@@ -6,8 +6,6 @@
 {% endfor %}
 
 namespace blink {
-{% set to_active_dom_object = '%s::toActiveDOMObject' % v8_class
-                              if is_active_dom_object else '0' %}
 {% set visit_dom_wrapper = '%s::visitDOMWrapper' % v8_class
                            if has_visit_dom_wrapper else '0' %}
 {% set parent_wrapper_type_info = '&V8%s::wrapperTypeInfo' % parent_interface
@@ -24,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-{{wrapper_type_info_const}}WrapperTypeInfo {{v8_class}}::wrapperTypeInfo = { gin::kEmbedderBlink, {{dom_template}}, {{v8_class}}::refObject, {{v8_class}}::derefObject, {{v8_class}}::trace, {{to_active_dom_object}}, {{visit_dom_wrapper}}, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", {{parent_wrapper_type_info}}, WrapperTypeInfo::{{wrapper_type_prototype}}, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}}, WrapperTypeInfo::{{gc_type}} };
+{{wrapper_type_info_const}}WrapperTypeInfo {{v8_class}}::wrapperTypeInfo = { gin::kEmbedderBlink, {{dom_template}}, {{v8_class}}::refObject, {{v8_class}}::derefObject, {{v8_class}}::trace, {{visit_dom_wrapper}}, {{v8_class}}::preparePrototypeAndInterfaceObject, {{v8_class}}::installConditionallyEnabledProperties, "{{interface_name}}", {{parent_wrapper_type_info}}, WrapperTypeInfo::{{wrapper_type_prototype}}, WrapperTypeInfo::{{wrapper_class_id}}, WrapperTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}}, WrapperTypeInfo::{{gc_type}} };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -437,7 +435,6 @@
 {##############################################################################}
 {% block prepare_prototype_and_interface_object %}{% endblock %}
 {##############################################################################}
-{% block to_active_dom_object %}{% endblock %}
 {% block ref_object_and_deref_object %}{% endblock %}
 {% for method in methods if method.is_implemented_in_private_script and method.visible %}
 {{method_implemented_in_private_script(method)}}
diff --git a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface.idl b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface.idl
index ea73543..58c1e12c 100644
--- a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface.idl
+++ b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface.idl
@@ -32,7 +32,7 @@
 // Also used as a target by TestObject
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterfaceImplementation,
diff --git a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface2.idl b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface2.idl
index 827ef50..18ab03f 100644
--- a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface2.idl
+++ b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterface2.idl
@@ -35,7 +35,7 @@
 
 [
     Constructor,
-    DependentLifetime, // Covered by [ActiveDOMObject]
+    DependentLifetime, // Covered by [DependentLifetime]
     SetWrapperReferenceFrom=ownerNode, // Conflicts with [SetWrapperReferenceTo]
     // Note that Exposed(Arguments) has no effect on bindings-tests. It is
     // processed in generate_global_constructors.py.
diff --git a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
index bc8a06b..1185fab 100644
--- a/third_party/WebKit/Source/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
+++ b/third_party/WebKit/Source/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     NamedConstructor=Audio(
         DOMString stringArg,
         [Default=Undefined] optional boolean defaultUndefinedOptionalBooleanArg,
diff --git a/third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface5.idl b/third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface5.idl
index 0efbf7da..7179186e 100644
--- a/third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface5.idl
+++ b/third_party/WebKit/Source/bindings/tests/idls/modules/TestInterface5.idl
@@ -34,7 +34,7 @@
 enum TestEnumModules { "EnumModulesValue1", "EnumModulesValue2" };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterface5Implementation,
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
index 7a5b3d6c..02b6503 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8ArrayBuffer::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBuffer::refObject, V8ArrayBuffer::derefObject, V8ArrayBuffer::trace, 0, 0, V8ArrayBuffer::preparePrototypeAndInterfaceObject, V8ArrayBuffer::installConditionallyEnabledProperties, "ArrayBuffer", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8ArrayBuffer::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBuffer::refObject, V8ArrayBuffer::derefObject, V8ArrayBuffer::trace, 0, V8ArrayBuffer::preparePrototypeAndInterfaceObject, V8ArrayBuffer::installConditionallyEnabledProperties, "ArrayBuffer", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
index 395989c..0fbd2b0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
@@ -34,7 +34,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8ArrayBufferView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBufferView::refObject, V8ArrayBufferView::derefObject, V8ArrayBufferView::trace, 0, 0, V8ArrayBufferView::preparePrototypeAndInterfaceObject, V8ArrayBufferView::installConditionallyEnabledProperties, "ArrayBufferView", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8ArrayBufferView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8ArrayBufferView::refObject, V8ArrayBufferView::derefObject, V8ArrayBufferView::trace, 0, V8ArrayBufferView::preparePrototypeAndInterfaceObject, V8ArrayBufferView::installConditionallyEnabledProperties, "ArrayBufferView", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
index 4dad8a53..537d8fc 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8DataView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8DataView::refObject, V8DataView::derefObject, V8DataView::trace, 0, 0, V8DataView::preparePrototypeAndInterfaceObject, V8DataView::installConditionallyEnabledProperties, "DataView", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8DataView::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8DataView::refObject, V8DataView::derefObject, V8DataView::trace, 0, V8DataView::preparePrototypeAndInterfaceObject, V8DataView::installConditionallyEnabledProperties, "DataView", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 3655d18..8ece8f8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8SVGTestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8SVGTestInterface::domTemplate, V8SVGTestInterface::refObject, V8SVGTestInterface::derefObject, V8SVGTestInterface::trace, 0, 0, V8SVGTestInterface::preparePrototypeAndInterfaceObject, V8SVGTestInterface::installConditionallyEnabledProperties, "SVGTestInterface", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8SVGTestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8SVGTestInterface::domTemplate, V8SVGTestInterface::refObject, V8SVGTestInterface::derefObject, V8SVGTestInterface::trace, 0, V8SVGTestInterface::preparePrototypeAndInterfaceObject, V8SVGTestInterface::installConditionallyEnabledProperties, "SVGTestInterface", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
index 137b2451..48bede98 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestException::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestException::domTemplate, V8TestException::refObject, V8TestException::derefObject, V8TestException::trace, 0, 0, V8TestException::preparePrototypeAndInterfaceObject, V8TestException::installConditionallyEnabledProperties, "TestException", 0, WrapperTypeInfo::WrapperTypeExceptionPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestException::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestException::domTemplate, V8TestException::refObject, V8TestException::derefObject, V8TestException::trace, 0, V8TestException::preparePrototypeAndInterfaceObject, V8TestException::installConditionallyEnabledProperties, "TestException", 0, WrapperTypeInfo::WrapperTypeExceptionPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 de8714b..fec16281 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexed::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexed::domTemplate, V8TestIntegerIndexed::refObject, V8TestIntegerIndexed::derefObject, V8TestIntegerIndexed::trace, 0, 0, V8TestIntegerIndexed::preparePrototypeAndInterfaceObject, V8TestIntegerIndexed::installConditionallyEnabledProperties, "TestIntegerIndexed", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestIntegerIndexed::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexed::domTemplate, V8TestIntegerIndexed::refObject, V8TestIntegerIndexed::derefObject, V8TestIntegerIndexed::trace, 0, V8TestIntegerIndexed::preparePrototypeAndInterfaceObject, V8TestIntegerIndexed::installConditionallyEnabledProperties, "TestIntegerIndexed", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 9785e31..c7d91cf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexedGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedGlobal::domTemplate, V8TestIntegerIndexedGlobal::refObject, V8TestIntegerIndexedGlobal::derefObject, V8TestIntegerIndexedGlobal::trace, 0, 0, V8TestIntegerIndexedGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestIntegerIndexedGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedGlobal::domTemplate, V8TestIntegerIndexedGlobal::refObject, V8TestIntegerIndexedGlobal::derefObject, V8TestIntegerIndexedGlobal::trace, 0, V8TestIntegerIndexedGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 c6544bc9..6bcd7a2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestIntegerIndexedPrimaryGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedPrimaryGlobal::domTemplate, V8TestIntegerIndexedPrimaryGlobal::refObject, V8TestIntegerIndexedPrimaryGlobal::derefObject, V8TestIntegerIndexedPrimaryGlobal::trace, 0, 0, V8TestIntegerIndexedPrimaryGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedPrimaryGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedPrimaryGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestIntegerIndexedPrimaryGlobal::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestIntegerIndexedPrimaryGlobal::domTemplate, V8TestIntegerIndexedPrimaryGlobal::refObject, V8TestIntegerIndexedPrimaryGlobal::derefObject, V8TestIntegerIndexedPrimaryGlobal::trace, 0, V8TestIntegerIndexedPrimaryGlobal::preparePrototypeAndInterfaceObject, V8TestIntegerIndexedPrimaryGlobal::installConditionallyEnabledProperties, "TestIntegerIndexedPrimaryGlobal", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 1c98240..eb093fc 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -45,7 +45,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-WrapperTypeInfo V8TestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface::domTemplate, V8TestInterface::refObject, V8TestInterface::derefObject, V8TestInterface::trace, V8TestInterface::toActiveDOMObject, V8TestInterface::visitDOMWrapper, V8TestInterface::preparePrototypeAndInterfaceObject, V8TestInterface::installConditionallyEnabledProperties, "TestInterface", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+WrapperTypeInfo V8TestInterface::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface::domTemplate, V8TestInterface::refObject, V8TestInterface::derefObject, V8TestInterface::trace, V8TestInterface::visitDOMWrapper, V8TestInterface::preparePrototypeAndInterfaceObject, V8TestInterface::installConditionallyEnabledProperties, "TestInterface", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -3224,11 +3224,6 @@
     }
 }
 
-ActiveDOMObject* V8TestInterface::toActiveDOMObject(v8::Local<v8::Object> wrapper)
-{
-    return toImpl(wrapper);
-}
-
 void V8TestInterface::refObject(ScriptWrappable* scriptWrappable)
 {
     scriptWrappable->toImpl<TestInterfaceImplementation>()->ref();
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
index e7a46e8..f08504d3 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.h
@@ -46,7 +46,6 @@
     {
     }
     static void visitDOMWrapper(v8::Isolate*, ScriptWrappable*, const v8::Persistent<v8::Object>&);
-    static ActiveDOMObject* toActiveDOMObject(v8::Local<v8::Object>);
     static void implementsCustomVoidMethodMethodCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static void legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
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 7b7c596..9804d75 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -28,7 +28,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterface2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface2::domTemplate, V8TestInterface2::refObject, V8TestInterface2::derefObject, V8TestInterface2::trace, 0, V8TestInterface2::visitDOMWrapper, V8TestInterface2::preparePrototypeAndInterfaceObject, V8TestInterface2::installConditionallyEnabledProperties, "TestInterface2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterface2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface2::domTemplate, V8TestInterface2::refObject, V8TestInterface2::derefObject, V8TestInterface2::trace, V8TestInterface2::visitDOMWrapper, V8TestInterface2::preparePrototypeAndInterfaceObject, V8TestInterface2::installConditionallyEnabledProperties, "TestInterface2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 28a2d8e..3fc00679 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterface3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface3::domTemplate, V8TestInterface3::refObject, V8TestInterface3::derefObject, V8TestInterface3::trace, 0, V8TestInterface3::visitDOMWrapper, V8TestInterface3::preparePrototypeAndInterfaceObject, V8TestInterface3::installConditionallyEnabledProperties, "TestInterface3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterface3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface3::domTemplate, V8TestInterface3::refObject, V8TestInterface3::derefObject, V8TestInterface3::trace, V8TestInterface3::visitDOMWrapper, V8TestInterface3::preparePrototypeAndInterfaceObject, V8TestInterface3::installConditionallyEnabledProperties, "TestInterface3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 0c12c1a..a78b8e27 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceCheckSecurity::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCheckSecurity::domTemplate, V8TestInterfaceCheckSecurity::refObject, V8TestInterfaceCheckSecurity::derefObject, V8TestInterfaceCheckSecurity::trace, 0, 0, V8TestInterfaceCheckSecurity::preparePrototypeAndInterfaceObject, V8TestInterfaceCheckSecurity::installConditionallyEnabledProperties, "TestInterfaceCheckSecurity", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceCheckSecurity::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCheckSecurity::domTemplate, V8TestInterfaceCheckSecurity::refObject, V8TestInterfaceCheckSecurity::derefObject, V8TestInterfaceCheckSecurity::trace, 0, V8TestInterfaceCheckSecurity::preparePrototypeAndInterfaceObject, V8TestInterfaceCheckSecurity::installConditionallyEnabledProperties, "TestInterfaceCheckSecurity", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
index 6b0df0c..d80ac8cd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor::domTemplate, V8TestInterfaceConstructor::refObject, V8TestInterfaceConstructor::derefObject, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor::domTemplate, V8TestInterfaceConstructor::refObject, V8TestInterfaceConstructor::derefObject, V8TestInterfaceConstructor::trace, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -269,7 +269,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructorConstructor::domTemplate, V8TestInterfaceConstructor::refObject, V8TestInterfaceConstructor::derefObject, V8TestInterfaceConstructor::trace, 0, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructorConstructor::domTemplate, V8TestInterfaceConstructor::refObject, V8TestInterfaceConstructor::derefObject, V8TestInterfaceConstructor::trace, 0, V8TestInterfaceConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor::installConditionallyEnabledProperties, "TestInterfaceConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
index 9c8dec4..ba41411 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor2::domTemplate, V8TestInterfaceConstructor2::refObject, V8TestInterfaceConstructor2::derefObject, V8TestInterfaceConstructor2::trace, 0, 0, V8TestInterfaceConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor2::installConditionallyEnabledProperties, "TestInterfaceConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor2::domTemplate, V8TestInterfaceConstructor2::refObject, V8TestInterfaceConstructor2::derefObject, V8TestInterfaceConstructor2::trace, 0, V8TestInterfaceConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor2::installConditionallyEnabledProperties, "TestInterfaceConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
index 10ec66a..47cb9ff6d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor3::domTemplate, V8TestInterfaceConstructor3::refObject, V8TestInterfaceConstructor3::derefObject, V8TestInterfaceConstructor3::trace, 0, 0, V8TestInterfaceConstructor3::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor3::installConditionallyEnabledProperties, "TestInterfaceConstructor3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceConstructor3::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor3::domTemplate, V8TestInterfaceConstructor3::refObject, V8TestInterfaceConstructor3::derefObject, V8TestInterfaceConstructor3::trace, 0, V8TestInterfaceConstructor3::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor3::installConditionallyEnabledProperties, "TestInterfaceConstructor3", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
index 83353aa..cbc1020 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceConstructor4::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor4::domTemplate, V8TestInterfaceConstructor4::refObject, V8TestInterfaceConstructor4::derefObject, V8TestInterfaceConstructor4::trace, 0, 0, V8TestInterfaceConstructor4::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor4::installConditionallyEnabledProperties, "TestInterfaceConstructor4", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceConstructor4::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceConstructor4::domTemplate, V8TestInterfaceConstructor4::refObject, V8TestInterfaceConstructor4::derefObject, V8TestInterfaceConstructor4::trace, 0, V8TestInterfaceConstructor4::preparePrototypeAndInterfaceObject, V8TestInterfaceConstructor4::installConditionallyEnabledProperties, "TestInterfaceConstructor4", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
index 5173a81..3efa70f4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceCustomConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCustomConstructor::domTemplate, V8TestInterfaceCustomConstructor::refObject, V8TestInterfaceCustomConstructor::derefObject, V8TestInterfaceCustomConstructor::trace, 0, 0, V8TestInterfaceCustomConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceCustomConstructor::installConditionallyEnabledProperties, "TestInterfaceCustomConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceCustomConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceCustomConstructor::domTemplate, V8TestInterfaceCustomConstructor::refObject, V8TestInterfaceCustomConstructor::derefObject, V8TestInterfaceCustomConstructor::trace, 0, V8TestInterfaceCustomConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceCustomConstructor::installConditionallyEnabledProperties, "TestInterfaceCustomConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 6066aa8d..864bd997 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -27,7 +27,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceDocument::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceDocument::domTemplate, V8TestInterfaceDocument::refObject, V8TestInterfaceDocument::derefObject, V8TestInterfaceDocument::trace, 0, 0, V8TestInterfaceDocument::preparePrototypeAndInterfaceObject, V8TestInterfaceDocument::installConditionallyEnabledProperties, "TestInterfaceDocument", &V8Document::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceDocument::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceDocument::domTemplate, V8TestInterfaceDocument::refObject, V8TestInterfaceDocument::derefObject, V8TestInterfaceDocument::trace, 0, V8TestInterfaceDocument::preparePrototypeAndInterfaceObject, V8TestInterfaceDocument::installConditionallyEnabledProperties, "TestInterfaceDocument", &V8Document::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
index d9b66ba7..c796f33 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
@@ -21,7 +21,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEmpty::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEmpty::domTemplate, V8TestInterfaceEmpty::refObject, V8TestInterfaceEmpty::derefObject, V8TestInterfaceEmpty::trace, 0, 0, V8TestInterfaceEmpty::preparePrototypeAndInterfaceObject, V8TestInterfaceEmpty::installConditionallyEnabledProperties, "TestInterfaceEmpty", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceEmpty::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEmpty::domTemplate, V8TestInterfaceEmpty::refObject, V8TestInterfaceEmpty::derefObject, V8TestInterfaceEmpty::trace, 0, V8TestInterfaceEmpty::preparePrototypeAndInterfaceObject, V8TestInterfaceEmpty::installConditionallyEnabledProperties, "TestInterfaceEmpty", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 b3f2af97..d8b42fa 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -24,7 +24,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventInitConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventInitConstructor::domTemplate, V8TestInterfaceEventInitConstructor::refObject, V8TestInterfaceEventInitConstructor::derefObject, V8TestInterfaceEventInitConstructor::trace, 0, 0, V8TestInterfaceEventInitConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceEventInitConstructor::installConditionallyEnabledProperties, "TestInterfaceEventInitConstructor", &V8Event::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceEventInitConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventInitConstructor::domTemplate, V8TestInterfaceEventInitConstructor::refObject, V8TestInterfaceEventInitConstructor::derefObject, V8TestInterfaceEventInitConstructor::trace, 0, V8TestInterfaceEventInitConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceEventInitConstructor::installConditionallyEnabledProperties, "TestInterfaceEventInitConstructor", &V8Event::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
index 70a2cfce..1841ad2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventTarget::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTarget::domTemplate, V8TestInterfaceEventTarget::refObject, V8TestInterfaceEventTarget::derefObject, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceEventTarget::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTarget::domTemplate, V8TestInterfaceEventTarget::refObject, V8TestInterfaceEventTarget::derefObject, V8TestInterfaceEventTarget::trace, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -42,7 +42,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceEventTargetConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTargetConstructor::domTemplate, V8TestInterfaceEventTarget::refObject, V8TestInterfaceEventTarget::derefObject, V8TestInterfaceEventTarget::trace, 0, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceEventTargetConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceEventTargetConstructor::domTemplate, V8TestInterfaceEventTarget::refObject, V8TestInterfaceEventTarget::derefObject, V8TestInterfaceEventTarget::trace, 0, V8TestInterfaceEventTarget::preparePrototypeAndInterfaceObject, V8TestInterfaceEventTarget::installConditionallyEnabledProperties, "TestInterfaceEventTarget", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 7ff47a7..d1c7ed2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceGarbageCollected::domTemplate, V8TestInterfaceGarbageCollected::refObject, V8TestInterfaceGarbageCollected::derefObject, V8TestInterfaceGarbageCollected::trace, 0, 0, V8TestInterfaceGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::GarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceGarbageCollected::domTemplate, V8TestInterfaceGarbageCollected::refObject, V8TestInterfaceGarbageCollected::derefObject, V8TestInterfaceGarbageCollected::trace, 0, V8TestInterfaceGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::GarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
index c1b2103..9cc34a2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor::domTemplate, V8TestInterfaceNamedConstructor::refObject, V8TestInterfaceNamedConstructor::derefObject, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveDOMObject, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor::domTemplate, V8TestInterfaceNamedConstructor::refObject, V8TestInterfaceNamedConstructor::derefObject, V8TestInterfaceNamedConstructor::trace, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -73,7 +73,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructorConstructor::domTemplate, V8TestInterfaceNamedConstructor::refObject, V8TestInterfaceNamedConstructor::derefObject, V8TestInterfaceNamedConstructor::trace, V8TestInterfaceNamedConstructor::toActiveDOMObject, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceNamedConstructorConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructorConstructor::domTemplate, V8TestInterfaceNamedConstructor::refObject, V8TestInterfaceNamedConstructor::derefObject, V8TestInterfaceNamedConstructor::trace, 0, V8TestInterfaceNamedConstructor::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -206,11 +206,6 @@
     return hasInstance(value, isolate) ? toImpl(v8::Local<v8::Object>::Cast(value)) : 0;
 }
 
-ActiveDOMObject* V8TestInterfaceNamedConstructor::toActiveDOMObject(v8::Local<v8::Object> wrapper)
-{
-    return toImpl(wrapper);
-}
-
 void V8TestInterfaceNamedConstructor::refObject(ScriptWrappable* scriptWrappable)
 {
     scriptWrappable->toImpl<TestInterfaceNamedConstructor>()->ref();
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
index ed3e1ce1..6a3a8b29 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
@@ -43,7 +43,6 @@
     static void trace(VisitorDispatcher visitor, ScriptWrappable* scriptWrappable)
     {
     }
-    static ActiveDOMObject* toActiveDOMObject(v8::Local<v8::Object>);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
     static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
     static void preparePrototypeAndInterfaceObject(v8::Local<v8::Context>, v8::Local<v8::Object> prototypeObject, v8::Local<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTemplate) { }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
index f91fa7e..3230b04 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2::domTemplate, V8TestInterfaceNamedConstructor2::refObject, V8TestInterfaceNamedConstructor2::derefObject, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor2::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2::domTemplate, V8TestInterfaceNamedConstructor2::refObject, V8TestInterfaceNamedConstructor2::derefObject, V8TestInterfaceNamedConstructor2::trace, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -42,7 +42,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNamedConstructor2Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2Constructor::domTemplate, V8TestInterfaceNamedConstructor2::refObject, V8TestInterfaceNamedConstructor2::derefObject, V8TestInterfaceNamedConstructor2::trace, 0, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterfaceNamedConstructor2Constructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNamedConstructor2Constructor::domTemplate, V8TestInterfaceNamedConstructor2::refObject, V8TestInterfaceNamedConstructor2::derefObject, V8TestInterfaceNamedConstructor2::trace, 0, V8TestInterfaceNamedConstructor2::preparePrototypeAndInterfaceObject, V8TestInterfaceNamedConstructor2::installConditionallyEnabledProperties, "TestInterfaceNamedConstructor2", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 a2335d7..c1c114d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNode::domTemplate, V8TestInterfaceNode::refObject, V8TestInterfaceNode::derefObject, V8TestInterfaceNode::trace, 0, 0, V8TestInterfaceNode::preparePrototypeAndInterfaceObject, V8TestInterfaceNode::installConditionallyEnabledProperties, "TestInterfaceNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceNode::domTemplate, V8TestInterfaceNode::refObject, V8TestInterfaceNode::derefObject, V8TestInterfaceNode::trace, 0, V8TestInterfaceNode::preparePrototypeAndInterfaceObject, V8TestInterfaceNode::installConditionallyEnabledProperties, "TestInterfaceNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp
index 2dd0572af..c900cfa0c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceWillBeGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceWillBeGarbageCollected::domTemplate, V8TestInterfaceWillBeGarbageCollected::refObject, V8TestInterfaceWillBeGarbageCollected::derefObject, V8TestInterfaceWillBeGarbageCollected::trace, 0, 0, V8TestInterfaceWillBeGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceWillBeGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceWillBeGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceWillBeGarbageCollected::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceWillBeGarbageCollected::domTemplate, V8TestInterfaceWillBeGarbageCollected::refObject, V8TestInterfaceWillBeGarbageCollected::derefObject, V8TestInterfaceWillBeGarbageCollected::trace, 0, V8TestInterfaceWillBeGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceWillBeGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceWillBeGarbageCollected", &V8EventTarget::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -124,7 +124,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterfaceWillBeGarbageCollectedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceWillBeGarbageCollectedConstructor::domTemplate, V8TestInterfaceWillBeGarbageCollected::refObject, V8TestInterfaceWillBeGarbageCollected::derefObject, V8TestInterfaceWillBeGarbageCollected::trace, 0, 0, V8TestInterfaceWillBeGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceWillBeGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceWillBeGarbageCollected", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestInterfaceWillBeGarbageCollectedConstructor::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceWillBeGarbageCollectedConstructor::domTemplate, V8TestInterfaceWillBeGarbageCollected::refObject, V8TestInterfaceWillBeGarbageCollected::derefObject, V8TestInterfaceWillBeGarbageCollected::trace, 0, V8TestInterfaceWillBeGarbageCollected::preparePrototypeAndInterfaceObject, V8TestInterfaceWillBeGarbageCollected::installConditionallyEnabledProperties, "TestInterfaceWillBeGarbageCollected", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 690b725..6e20995 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -22,7 +22,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestNode::domTemplate, V8TestNode::refObject, V8TestNode::derefObject, V8TestNode::trace, 0, 0, V8TestNode::preparePrototypeAndInterfaceObject, V8TestNode::installConditionallyEnabledProperties, "TestNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
+const WrapperTypeInfo V8TestNode::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestNode::domTemplate, V8TestNode::refObject, V8TestNode::derefObject, V8TestNode::trace, 0, V8TestNode::preparePrototypeAndInterfaceObject, V8TestNode::installConditionallyEnabledProperties, "TestNode", &V8Node::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::NodeClassId, WrapperTypeInfo::InheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::WillBeGarbageCollectedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 c968062b..29215c4 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -83,7 +83,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestObject::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestObject::domTemplate, V8TestObject::refObject, V8TestObject::derefObject, V8TestObject::trace, 0, 0, V8TestObject::preparePrototypeAndInterfaceObject, V8TestObject::installConditionallyEnabledProperties, "TestObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestObject::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestObject::domTemplate, V8TestObject::refObject, V8TestObject::derefObject, V8TestObject::trace, 0, V8TestObject::preparePrototypeAndInterfaceObject, V8TestObject::installConditionallyEnabledProperties, "TestObject", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
index ed732e562..5998987 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -28,7 +28,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestSpecialOperations::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperations::domTemplate, V8TestSpecialOperations::refObject, V8TestSpecialOperations::derefObject, V8TestSpecialOperations::trace, 0, 0, V8TestSpecialOperations::preparePrototypeAndInterfaceObject, V8TestSpecialOperations::installConditionallyEnabledProperties, "TestSpecialOperations", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestSpecialOperations::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperations::domTemplate, V8TestSpecialOperations::refObject, V8TestSpecialOperations::derefObject, V8TestSpecialOperations::trace, 0, V8TestSpecialOperations::preparePrototypeAndInterfaceObject, V8TestSpecialOperations::installConditionallyEnabledProperties, "TestSpecialOperations", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
index 2d08668a..0b8c8fd 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -21,7 +21,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestSpecialOperationsNotEnumerable::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperationsNotEnumerable::domTemplate, V8TestSpecialOperationsNotEnumerable::refObject, V8TestSpecialOperationsNotEnumerable::derefObject, V8TestSpecialOperationsNotEnumerable::trace, 0, 0, V8TestSpecialOperationsNotEnumerable::preparePrototypeAndInterfaceObject, V8TestSpecialOperationsNotEnumerable::installConditionallyEnabledProperties, "TestSpecialOperationsNotEnumerable", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestSpecialOperationsNotEnumerable::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestSpecialOperationsNotEnumerable::domTemplate, V8TestSpecialOperationsNotEnumerable::refObject, V8TestSpecialOperationsNotEnumerable::derefObject, V8TestSpecialOperationsNotEnumerable::trace, 0, V8TestSpecialOperationsNotEnumerable::preparePrototypeAndInterfaceObject, V8TestSpecialOperationsNotEnumerable::installConditionallyEnabledProperties, "TestSpecialOperationsNotEnumerable", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 77f97fa..6577743 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -26,7 +26,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestTypedefs::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestTypedefs::domTemplate, V8TestTypedefs::refObject, V8TestTypedefs::derefObject, V8TestTypedefs::trace, 0, 0, V8TestTypedefs::preparePrototypeAndInterfaceObject, V8TestTypedefs::installConditionallyEnabledProperties, "TestTypedefs", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestTypedefs::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestTypedefs::domTemplate, V8TestTypedefs::refObject, V8TestTypedefs::derefObject, V8TestTypedefs::trace, 0, V8TestTypedefs::preparePrototypeAndInterfaceObject, V8TestTypedefs::installConditionallyEnabledProperties, "TestTypedefs", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
index 5a3427a..be869020 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
@@ -23,7 +23,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8Uint8ClampedArray::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8Uint8ClampedArray::refObject, V8Uint8ClampedArray::derefObject, V8Uint8ClampedArray::trace, 0, 0, V8Uint8ClampedArray::preparePrototypeAndInterfaceObject, V8Uint8ClampedArray::installConditionallyEnabledProperties, "Uint8ClampedArray", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8Uint8ClampedArray::wrapperTypeInfo = { gin::kEmbedderBlink, 0, V8Uint8ClampedArray::refObject, V8Uint8ClampedArray::derefObject, V8Uint8ClampedArray::trace, 0, V8Uint8ClampedArray::preparePrototypeAndInterfaceObject, V8Uint8ClampedArray::installConditionallyEnabledProperties, "Uint8ClampedArray", &V8ArrayBufferView::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Independent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
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 8105f624..bcd969e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -28,7 +28,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #endif
-const WrapperTypeInfo V8TestInterface5::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface5::domTemplate, V8TestInterface5::refObject, V8TestInterface5::derefObject, V8TestInterface5::trace, V8TestInterface5::toActiveDOMObject, V8TestInterface5::visitDOMWrapper, V8TestInterface5::preparePrototypeAndInterfaceObject, V8TestInterface5::installConditionallyEnabledProperties, "TestInterface5", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
+const WrapperTypeInfo V8TestInterface5::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterface5::domTemplate, V8TestInterface5::refObject, V8TestInterface5::derefObject, V8TestInterface5::trace, V8TestInterface5::visitDOMWrapper, V8TestInterface5::preparePrototypeAndInterfaceObject, V8TestInterface5::installConditionallyEnabledProperties, "TestInterface5", &V8TestInterfaceEmpty::wrapperTypeInfo, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::ObjectClassId, WrapperTypeInfo::NotInheritFromEventTarget, WrapperTypeInfo::Dependent, WrapperTypeInfo::RefCountedObject };
 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
@@ -928,11 +928,6 @@
     }
 }
 
-ActiveDOMObject* V8TestInterface5::toActiveDOMObject(v8::Local<v8::Object> wrapper)
-{
-    return toImpl(wrapper);
-}
-
 void V8TestInterface5::refObject(ScriptWrappable* scriptWrappable)
 {
     scriptWrappable->toImpl<TestInterface5Implementation>()->ref();
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
index 4648f9f..447323f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.h
@@ -38,7 +38,6 @@
     {
     }
     static void visitDOMWrapper(v8::Isolate*, ScriptWrappable*, const v8::Persistent<v8::Object>&);
-    static ActiveDOMObject* toActiveDOMObject(v8::Local<v8::Object>);
     static void legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>&);
     static const int internalFieldCount = v8DefaultWrapperInternalFieldCount + 0;
     static void installConditionallyEnabledProperties(v8::Local<v8::Object>, v8::Isolate*) { }
diff --git a/third_party/WebKit/Source/core/animation/Animation.idl b/third_party/WebKit/Source/core/animation/Animation.idl
index 39c15ef..34099ba 100644
--- a/third_party/WebKit/Source/core/animation/Animation.idl
+++ b/third_party/WebKit/Source/core/animation/Animation.idl
@@ -33,7 +33,7 @@
 enum AnimationPlayState { "idle", "pending", "running", "paused", "finished" };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     NoInterfaceObject,
 ] interface Animation : EventTarget {
     // TODO(dstockwell): Add timeline property.
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi
index 2d9944f..02544d70 100644
--- a/third_party/WebKit/Source/core/core.gypi
+++ b/third_party/WebKit/Source/core/core.gypi
@@ -242,7 +242,7 @@
             'html/TimeRanges.idl',
             'html/ValidityState.idl',
             'html/VoidCallback.idl',
-            'html/canvas/OffscreenCanvasTemp.idl',
+            'html/canvas/OffscreenCanvas.idl',
             'html/track/AudioTrack.idl',
             'html/track/AudioTrackList.idl',
             'html/track/TextTrack.idl',
@@ -504,6 +504,7 @@
             'layout/api/LayoutBoxItem.h',
             'layout/api/LayoutBoxModel.h',
             'layout/api/LayoutItem.h',
+            'layout/api/LayoutTextControlItem.h',
             'layout/api/LayoutTextFragmentItem.h',
             'layout/api/LayoutTextItem.h',
             'layout/api/LineLayoutAPIShim.h',
@@ -2957,8 +2958,8 @@
             'html/canvas/CanvasRenderingContext.cpp',
             'html/canvas/CanvasRenderingContext.h',
             'html/canvas/CanvasRenderingContextFactory.h',
-            'html/canvas/OffscreenCanvasTemp.cpp',
-            'html/canvas/OffscreenCanvasTemp.h',
+            'html/canvas/OffscreenCanvas.cpp',
+            'html/canvas/OffscreenCanvas.h',
             'html/forms/BaseButtonInputType.cpp',
             'html/forms/BaseButtonInputType.h',
             'html/forms/BaseCheckableInputType.cpp',
diff --git a/third_party/WebKit/Source/core/css/FontFace.idl b/third_party/WebKit/Source/core/css/FontFace.idl
index e847005..527e800 100644
--- a/third_party/WebKit/Source/core/css/FontFace.idl
+++ b/third_party/WebKit/Source/core/css/FontFace.idl
@@ -39,7 +39,7 @@
 
 // TODO(philipj): This interface should be [Exposed=Window,Worker].
 [
-    ActiveDOMObject,
+    DependentLifetime,
     // FIXME: This should be (DOMString or BinaryData), where BinaryData is typedef of (ArrayBuffer or ArrayBufferView)
     Constructor(DOMString family, (DOMString or ArrayBuffer or ArrayBufferView) source, optional FontFaceDescriptors descriptors),
     ConstructorCallWith=ExecutionContext,
diff --git a/third_party/WebKit/Source/core/css/FontFaceSet.idl b/third_party/WebKit/Source/core/css/FontFaceSet.idl
index ce3eb1d3..9f7480e 100644
--- a/third_party/WebKit/Source/core/css/FontFaceSet.idl
+++ b/third_party/WebKit/Source/core/css/FontFaceSet.idl
@@ -35,7 +35,7 @@
 // TODO(philipj): This interface should be [Exposed=Window,Worker] and should
 // have a constructor, and thus not have [NoInterfaceObject].
 [
-    ActiveDOMObject,
+    DependentLifetime,
     SetWrapperReferenceFrom=document,
     NoInterfaceObject,
 ] interface FontFaceSet : EventTarget {
diff --git a/third_party/WebKit/Source/core/css/MediaQueryList.idl b/third_party/WebKit/Source/core/css/MediaQueryList.idl
index 7c1a4af..f1906be 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryList.idl
+++ b/third_party/WebKit/Source/core/css/MediaQueryList.idl
@@ -20,7 +20,7 @@
 // http://dev.w3.org/csswg/cssom-view/#the-mediaquerylist-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
 ] interface MediaQueryList : EventTarget {
     readonly attribute DOMString media;
     readonly attribute boolean matches;
diff --git a/third_party/WebKit/Source/core/dom/DOMException.cpp b/third_party/WebKit/Source/core/dom/DOMException.cpp
index a8b1414e..7936f52 100644
--- a/third_party/WebKit/Source/core/dom/DOMException.cpp
+++ b/third_party/WebKit/Source/core/dom/DOMException.cpp
@@ -37,6 +37,7 @@
     const char* const message;
     const int code;
 } coreExceptions[] = {
+    // This list must be kept in sync with the one in ExceptionCode.h
     { "IndexSizeError", "Index or size was negative, or greater than the allowed value.", 1 },
     { "HierarchyRequestError", "A Node was inserted somewhere it doesn't belong.", 3 },
     { "WrongDocumentError", "A Node was used in a different document than the one that created it (that doesn't support it).", 4 },
@@ -81,6 +82,9 @@
 
     // Push API
     { "PermissionDeniedError", "User or security policy denied the request.", 0 },
+
+    // Used by HTML and Media Session API.
+    { "NotAllowedError", "The request is not allowed by the user agent or the platform in the current context.", 0 },
 };
 
 static const CoreException* getErrorEntry(ExceptionCode ec)
diff --git a/third_party/WebKit/Source/core/dom/ExceptionCode.h b/third_party/WebKit/Source/core/dom/ExceptionCode.h
index fb008e9..f1ab4fda 100644
--- a/third_party/WebKit/Source/core/dom/ExceptionCode.h
+++ b/third_party/WebKit/Source/core/dom/ExceptionCode.h
@@ -84,6 +84,8 @@
 
     // Push API
     PermissionDeniedError,
+
+    NotAllowedError,
 };
 
 enum V8ErrorType {
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.idl b/third_party/WebKit/Source/core/dom/MessagePort.idl
index 3c21c03bc..895e05e 100644
--- a/third_party/WebKit/Source/core/dom/MessagePort.idl
+++ b/third_party/WebKit/Source/core/dom/MessagePort.idl
@@ -28,7 +28,7 @@
 // https://html.spec.whatwg.org/#message-ports
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Exposed=(Window,Worker),
     GarbageCollected,
 ] interface MessagePort : EventTarget {
diff --git a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
index 3c86d58..a89f7df 100644
--- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
+++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
@@ -376,13 +376,13 @@
         ScriptResource* resource = m_resource ? m_resource.get() : sourceCode.resource();
         if (resource) {
             if (!resource->mimeTypeAllowedByNosniff()) {
-                contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->url().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable, and strict MIME type checking is enabled."));
+                contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->url().elidedString() + "' because its MIME type ('" + resource->httpContentType() + "') is not executable, and strict MIME type checking is enabled."));
                 return false;
             }
 
-            String mimetype = resource->mimeType();
-            if (mimetype.lower().startsWith("image/")) {
-                contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->url().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable."));
+            String mimetype = resource->httpContentType();
+            if (mimetype.startsWith("image/")) {
+                contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->url().elidedString() + "' because its MIME type ('" + mimetype + "') is not executable."));
                 UseCounter::count(frame, UseCounter::BlockedSniffingImageToScript);
                 return false;
             }
diff --git a/third_party/WebKit/Source/core/events/Event.cpp b/third_party/WebKit/Source/core/events/Event.cpp
index 79ab050f..960db36 100644
--- a/third_party/WebKit/Source/core/events/Event.cpp
+++ b/third_party/WebKit/Source/core/events/Event.cpp
@@ -257,6 +257,16 @@
 
 WillBeHeapVector<RefPtrWillBeMember<EventTarget>> Event::path(ScriptState* scriptState) const
 {
+    return pathInternal(scriptState, NonEmptyAfterDispatch);
+}
+
+WillBeHeapVector<RefPtrWillBeMember<EventTarget>> Event::deepPath(ScriptState* scriptState) const
+{
+    return pathInternal(scriptState, EmptyAfterDispatch);
+}
+
+WillBeHeapVector<RefPtrWillBeMember<EventTarget>> Event::pathInternal(ScriptState* scriptState, EventPathMode mode) const
+{
     if (m_target)
         OriginsUsingFeatures::countOriginOrIsolatedWorldHumanReadableName(scriptState, *m_target, OriginsUsingFeatures::Feature::EventPath);
 
@@ -268,6 +278,8 @@
         }
         ASSERT(!m_eventPath->isEmpty());
         // After dispatching the event
+        if (mode == EmptyAfterDispatch)
+            return WillBeHeapVector<RefPtrWillBeMember<EventTarget>>();
         return m_eventPath->last().treeScopeEventContext().ensureEventPath(*m_eventPath);
     }
 
diff --git a/third_party/WebKit/Source/core/events/Event.h b/third_party/WebKit/Source/core/events/Event.h
index e447f5d33..ab661b8 100644
--- a/third_party/WebKit/Source/core/events/Event.h
+++ b/third_party/WebKit/Source/core/events/Event.h
@@ -187,6 +187,7 @@
     void initEventPath(Node&);
 
     WillBeHeapVector<RefPtrWillBeMember<EventTarget>> path(ScriptState*) const;
+    WillBeHeapVector<RefPtrWillBeMember<EventTarget>> deepPath(ScriptState*) const;
 
     bool isBeingDispatched() const { return eventPhase(); }
 
@@ -217,6 +218,13 @@
     void setCanBubble(bool bubble) { m_canBubble = bubble; }
 
 private:
+    enum EventPathMode {
+        EmptyAfterDispatch,
+        NonEmptyAfterDispatch
+    };
+
+    WillBeHeapVector<RefPtrWillBeMember<EventTarget>> pathInternal(ScriptState*, EventPathMode) const;
+
     AtomicString m_type;
     unsigned m_canBubble:1;
     unsigned m_cancelable:1;
diff --git a/third_party/WebKit/Source/core/events/Event.idl b/third_party/WebKit/Source/core/events/Event.idl
index 4157a4c0a..e2f5a1c 100644
--- a/third_party/WebKit/Source/core/events/Event.idl
+++ b/third_party/WebKit/Source/core/events/Event.idl
@@ -66,7 +66,7 @@
     // Shadow DOM
     // https://w3c.github.io/webcomponents/spec/shadow/#extensions-to-event-interface
     [MeasureAs=EventPath, CallWith=ScriptState] readonly attribute EventTarget[] path;
-    [RuntimeEnabled=ShadowDOMV1, ImplementedAs=path, MeasureAs=EventDeepPath, CallWith=ScriptState] sequence<EventTarget> deepPath();
+    [RuntimeEnabled=ShadowDOMV1, MeasureAs=EventDeepPath, CallWith=ScriptState] sequence<EventTarget> deepPath();
 
     // Non-standard APIs
     const unsigned short MOUSEDOWN = 1;
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
index 5c99c31..a7716388 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
+++ b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp
@@ -1,4 +1,4 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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.
 
@@ -26,6 +26,28 @@
     return "";
 }
 
+const AtomicString& pointerEventNameForMouseEventName(
+    const AtomicString& mouseEventName)
+{
+#define RETURN_CORRESPONDING_PE_NAME(eventSuffix) \
+    if (mouseEventName == EventTypeNames::mouse##eventSuffix) {\
+        return EventTypeNames::pointer##eventSuffix;\
+    }
+
+    RETURN_CORRESPONDING_PE_NAME(down);
+    RETURN_CORRESPONDING_PE_NAME(enter);
+    RETURN_CORRESPONDING_PE_NAME(leave);
+    RETURN_CORRESPONDING_PE_NAME(move);
+    RETURN_CORRESPONDING_PE_NAME(out);
+    RETURN_CORRESPONDING_PE_NAME(over);
+    RETURN_CORRESPONDING_PE_NAME(up);
+
+#undef RETURN_CORRESPONDING_PE_NAME
+
+    ASSERT_NOT_REACHED();
+    return emptyAtom;
+}
+
 } // namespace
 
 const int PointerEventFactory::s_invalidId = 0;
@@ -40,47 +62,66 @@
     return force;
 }
 
-void PointerEventFactory::setIdAndType(PointerEventInit &pointerEventInit,
-    const WebPointerProperties &pointerProperties)
+void PointerEventFactory::setIdTypeButtons(PointerEventInit &pointerEventInit,
+    const WebPointerProperties &pointerProperties, unsigned buttons)
 {
     const WebPointerProperties::PointerType pointerType = pointerProperties.pointerType;
-    int pointerId = add(PointerEventFactory::IncomingId(toInt(pointerType), pointerProperties.id));
+    const IncomingId incomingId(pointerType, pointerProperties.id);
+    int pointerId = addIdAndActiveButtons(incomingId, buttons != 0);
+
+    pointerEventInit.setButtons(buttons);
     pointerEventInit.setPointerId(pointerId);
     pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointerType));
     pointerEventInit.setIsPrimary(isPrimary(pointerId));
 }
 
-PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(const AtomicString& type,
-    const PlatformMouseEvent& mouseEvent,
-    PassRefPtrWillBeRawPtr<Node> relatedTarget,
+PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(
+    const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent,
+    PassRefPtrWillBeRawPtr<EventTarget> relatedTarget,
     PassRefPtrWillBeRawPtr<AbstractView> view)
 {
+    AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEventName);
+    unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.modifiers());
     PointerEventInit pointerEventInit;
 
-    setIdAndType(pointerEventInit, mouseEvent.pointerProperties());
+    setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons);
 
     pointerEventInit.setScreenX(mouseEvent.globalPosition().x());
     pointerEventInit.setScreenY(mouseEvent.globalPosition().y());
     pointerEventInit.setClientX(mouseEvent.position().x());
     pointerEventInit.setClientY(mouseEvent.position().y());
-
-    pointerEventInit.setButton(mouseEvent.button());
-    pointerEventInit.setButtons(MouseEvent::platformModifiersToButtons(mouseEvent.modifiers()));
+    if (pointerEventName == EventTypeNames::pointerdown
+        || pointerEventName == EventTypeNames::pointerup) {
+        pointerEventInit.setButton(mouseEvent.button());
+    } else {
+        // TODO(crbug.com/587955): We are setting NoButton for transition
+        // pointerevents should be resolved as part of this bug
+        pointerEventInit.setButton(NoButton);
+    }
     pointerEventInit.setPressure(getPointerEventPressure(
         mouseEvent.pointerProperties().force, pointerEventInit.buttons()));
 
     UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.modifiers());
 
-    pointerEventInit.setBubbles(type != EventTypeNames::pointerenter
-        && type != EventTypeNames::pointerleave);
-    pointerEventInit.setCancelable(type != EventTypeNames::pointerenter
-        && type != EventTypeNames::pointerleave && type != EventTypeNames::pointercancel);
+    // Make sure chorded buttons fire pointermove instead of pointerup/down.
+    if ((pointerEventName == EventTypeNames::pointerdown
+        && (buttons & ~MouseEvent::buttonToButtons(mouseEvent.button())) != 0)
+        || (pointerEventName == EventTypeNames::pointerup && buttons != 0))
+        pointerEventName = EventTypeNames::pointermove;
+
+    pointerEventInit.setBubbles(
+        pointerEventName != EventTypeNames::pointerenter
+        && pointerEventName != EventTypeNames::pointerleave);
+    pointerEventInit.setCancelable(
+        pointerEventName != EventTypeNames::pointerenter
+        && pointerEventName != EventTypeNames::pointerleave
+        && pointerEventName != EventTypeNames::pointercancel);
 
     pointerEventInit.setView(view);
     if (relatedTarget)
         pointerEventInit.setRelatedTarget(relatedTarget);
 
-    return PointerEvent::create(type, pointerEventInit);
+    return PointerEvent::create(pointerEventName, pointerEventInit);
 }
 
 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(const AtomicString& type,
@@ -90,14 +131,19 @@
 {
     const PlatformTouchPoint::State pointState = touchPoint.state();
 
-    bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::TouchReleased
+    bool pointerReleasedOrCancelled =
+        pointState == PlatformTouchPoint::TouchReleased
         || pointState == PlatformTouchPoint::TouchCancelled;
+    bool pointerPressedOrReleased =
+        pointState == PlatformTouchPoint::TouchPressed
+        || pointState == PlatformTouchPoint::TouchReleased;
 
     bool isEnterOrLeave = false;
 
     PointerEventInit pointerEventInit;
 
-    setIdAndType(pointerEventInit, touchPoint.pointerProperties());
+    setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(),
+        pointerReleasedOrCancelled ? 0 : 1);
 
     pointerEventInit.setWidth(width);
     pointerEventInit.setHeight(height);
@@ -107,8 +153,7 @@
     pointerEventInit.setScreenY(touchPoint.screenPos().y());
     pointerEventInit.setClientX(clientX);
     pointerEventInit.setClientY(clientY);
-    pointerEventInit.setButton(0);
-    pointerEventInit.setButtons(pointerReleasedOrCancelled ? 0 : 1);
+    pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton);
     pointerEventInit.setPressure(getPointerEventPressure(
         touchPoint.force(), pointerEventInit.buttons()));
 
@@ -125,7 +170,7 @@
 {
     PointerEventInit pointerEventInit;
 
-    setIdAndType(pointerEventInit, touchPoint.pointerProperties());
+    setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), 0);
 
     pointerEventInit.setBubbles(true);
     pointerEventInit.setCancelable(false);
@@ -178,38 +223,47 @@
 
 void PointerEventFactory::clear()
 {
-    for (int type = 0; type <= toInt(WebPointerProperties::PointerType::LastEntry); type++) {
+    for (int type = 0;
+        type <= toInt(WebPointerProperties::PointerType::LastEntry); type++) {
         m_primaryId[type] = PointerEventFactory::s_invalidId;
         m_idCount[type] = 0;
     }
-    m_idMapping.clear();
-    m_idReverseMapping.clear();
+    m_pointerIncomingIdMapping.clear();
+    m_pointerIdMapping.clear();
 
     // Always add mouse pointer in initialization and never remove it.
-    // No need to add it to m_idMapping as it is not going to be used with the existing APIs
+    // No need to add it to m_pointerIncomingIdMapping as it is not going to be
+    // used with the existing APIs
     m_primaryId[toInt(WebPointerProperties::PointerType::Mouse)] = s_mouseId;
-    m_idReverseMapping.add(s_mouseId, IncomingId(toInt(WebPointerProperties::PointerType::Mouse), 0));
+    m_pointerIdMapping.add(s_mouseId, PointerAttributes(
+        IncomingId(WebPointerProperties::PointerType::Mouse, 0), 0));
 
     m_currentId = PointerEventFactory::s_mouseId+1;
 }
 
-int PointerEventFactory::add(const IncomingId p)
+int PointerEventFactory::addIdAndActiveButtons(const IncomingId p,
+    bool isActiveButtons)
 {
     // Do not add extra mouse pointer as it was added in initialization
-    if (p.first == toInt(WebPointerProperties::PointerType::Mouse))
+    if (p.pointerType() == toInt(WebPointerProperties::PointerType::Mouse)) {
+        m_pointerIdMapping.set(s_mouseId, PointerAttributes(p, isActiveButtons));
         return s_mouseId;
+    }
 
-    int type = p.first;
-    if (m_idMapping.contains(p))
-        return m_idMapping.get(p);
+    int type = p.pointerType();
+    if (m_pointerIncomingIdMapping.contains(p)) {
+        int mappedId = m_pointerIncomingIdMapping.get(p);
+        m_pointerIdMapping.set(mappedId, PointerAttributes(p, isActiveButtons));
+        return mappedId;
+    }
     // We do not handle the overflow of m_currentId as it should be very rare
     int mappedId = m_currentId++;
     if (!m_idCount[type])
         m_primaryId[type] = mappedId;
     m_idCount[type]++;
-    m_idMapping.add(p, mappedId);
-    m_idReverseMapping.add(mappedId, p);
-    return static_cast<int>(mappedId);
+    m_pointerIncomingIdMapping.add(p, mappedId);
+    m_pointerIdMapping.add(mappedId, PointerAttributes(p, isActiveButtons));
+    return mappedId;
 }
 
 void PointerEventFactory::remove(
@@ -217,13 +271,13 @@
 {
     int mappedId = pointerEvent->pointerId();
     // Do not remove mouse pointer id as it should always be there
-    if (mappedId == s_mouseId || !m_idReverseMapping.contains(mappedId))
+    if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId))
         return;
 
-    IncomingId p = m_idReverseMapping.get(mappedId);
-    int type = p.first;
-    m_idReverseMapping.remove(mappedId);
-    m_idMapping.remove(p);
+    IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
+    int type = p.pointerType();
+    m_pointerIdMapping.remove(mappedId);
+    m_pointerIncomingIdMapping.remove(p);
     if (m_primaryId[type] == mappedId)
         m_primaryId[type] = PointerEventFactory::s_invalidId;
     m_idCount[type]--;
@@ -231,13 +285,22 @@
 
 bool PointerEventFactory::isPrimary(int mappedId) const
 {
-    if (!m_idReverseMapping.contains(mappedId))
+    if (!m_pointerIdMapping.contains(mappedId))
         return false;
 
-    IncomingId p = m_idReverseMapping.get(mappedId);
-    int type = p.first;
-    return m_primaryId[type] == mappedId;
+    IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
+    return m_primaryId[p.pointerType()] == mappedId;
 }
 
+bool PointerEventFactory::isActive(const int pointerId)
+{
+    return m_pointerIdMapping.contains(pointerId);
+}
+
+bool PointerEventFactory::isActiveButtonsState(const int pointerId)
+{
+    return m_pointerIdMapping.contains(pointerId)
+        && m_pointerIdMapping.get(pointerId).isActiveButtons;
+}
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.h b/third_party/WebKit/Source/core/events/PointerEventFactory.h
index 01065464..335e298d 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactory.h
+++ b/third_party/WebKit/Source/core/events/PointerEventFactory.h
@@ -29,8 +29,9 @@
     PointerEventFactory();
     ~PointerEventFactory();
 
-    PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type,
-        const PlatformMouseEvent&, PassRefPtrWillBeRawPtr<Node> relatedTarget,
+    PassRefPtrWillBeRawPtr<PointerEvent> create(
+        const AtomicString& mouseEventName, const PlatformMouseEvent&,
+        PassRefPtrWillBeRawPtr<EventTarget> relatedTarget,
         PassRefPtrWillBeRawPtr<AbstractView>);
 
     PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type,
@@ -54,20 +55,41 @@
     // generated with the same id before.
     void remove(const PassRefPtrWillBeRawPtr<PointerEvent>);
 
+    // Returns whether a pointer id exists and active
+    bool isActive(const int);
+
+    // Returns whether a pointer id exists and has at least one pressed button
+    bool isActiveButtonsState(const int);
+
 private:
-    typedef std::pair<int, int> IncomingId;
     typedef WTF::UnsignedWithZeroKeyHashTraits<int> UnsignedHash;
+    typedef struct IncomingId : public std::pair<int, int> {
+        IncomingId() {}
+        IncomingId(WebPointerProperties::PointerType pointerType,
+            int rawId)
+            : std::pair<int, int>(static_cast<int>(pointerType), rawId) {}
+        int pointerType() const {return first;}
+        int rawId() const {return second;}
+    } IncomingId;
+    typedef struct PointerAttributes {
+        IncomingId incomingId;
+        bool isActiveButtons;
+        PointerAttributes() {}
+        PointerAttributes(IncomingId incomingId, unsigned isActiveButtons)
+        : incomingId(incomingId)
+        , isActiveButtons(isActiveButtons) {}
+    } PointerAttributes;
 
-    int add(const IncomingId);
+    int addIdAndActiveButtons(const IncomingId, bool isActiveButtons);
     bool isPrimary(const int) const;
-    void setIdAndType(PointerEventInit &, const WebPointerProperties &);
-
+    void setIdTypeButtons(PointerEventInit &, const WebPointerProperties &,
+        unsigned buttons);
     static const int s_invalidId;
     static const int s_mouseId;
 
     int m_currentId;
-    HashMap<IncomingId, int, WTF::PairHash<int, int>, WTF::PairHashTraits<UnsignedHash, UnsignedHash>> m_idMapping;
-    HashMap<int, IncomingId, WTF::IntHash<int>, UnsignedHash> m_idReverseMapping;
+    HashMap<IncomingId, int, WTF::PairHash<int, int>, WTF::PairHashTraits<UnsignedHash, UnsignedHash>> m_pointerIncomingIdMapping;
+    HashMap<int, PointerAttributes, WTF::IntHash<int>, UnsignedHash> m_pointerIdMapping;
     int m_primaryId[static_cast<int>(WebPointerProperties::PointerType::LastEntry) + 1];
     int m_idCount[static_cast<int>(WebPointerProperties::PointerType::LastEntry) + 1];
 };
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp b/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
index 2fc4101..47396ce 100644
--- a/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
+++ b/third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp
@@ -17,13 +17,19 @@
     void SetUp() override;
     PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckTouchCancel(
         WebPointerProperties::PointerType, int rawId,
-        int uniqueId, bool isPrimary);
+        int uniqueId, bool isPrimary,
+        PlatformTouchPoint::State = PlatformTouchPoint::TouchReleased);
     PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckTouchEvent(
         WebPointerProperties::PointerType, int rawId,
-        int uniqueId, bool isPrimary);
+        int uniqueId, bool isPrimary,
+        PlatformTouchPoint::State = PlatformTouchPoint::TouchPressed);
     PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckMouseEvent(
         WebPointerProperties::PointerType, int rawId,
-        int uniqueId, bool isPrimary);
+        int uniqueId, bool isPrimary,
+        PlatformEvent::Modifiers = PlatformEvent::NoModifiers);
+    void cloneAndCheckPointerEvent(
+        PassRefPtrWillBeRawPtr<PointerEvent>,
+        const AtomicString&);
 
     PointerEventFactory m_pointerEventFactory;
     unsigned m_expectedMouseId;
@@ -31,12 +37,14 @@
 
     class PlatformTouchPointBuilder : public PlatformTouchPoint {
     public:
-        PlatformTouchPointBuilder(WebPointerProperties::PointerType, int);
+        PlatformTouchPointBuilder(WebPointerProperties::PointerType, int,
+            PlatformTouchPoint::State);
     };
 
     class PlatformMouseEventBuilder : public PlatformMouseEvent {
     public:
-        PlatformMouseEventBuilder(WebPointerProperties::PointerType, int);
+        PlatformMouseEventBuilder(WebPointerProperties::PointerType, int,
+            PlatformEvent::Modifiers);
     };
 };
 
@@ -44,51 +52,70 @@
 {
     m_expectedMouseId = 1;
     m_mappedIdStart = 2;
-
 }
 
 PointerEventFactoryTest::PlatformTouchPointBuilder::PlatformTouchPointBuilder(
-    WebPointerProperties::PointerType pointerType, int id)
+    WebPointerProperties::PointerType pointerType, int id,
+    PlatformTouchPoint::State state)
 {
     m_pointerProperties.id = id;
     m_pointerProperties.pointerType = pointerType;
     m_pointerProperties.force = 1.0;
+    m_state = state;
 }
 
 PointerEventFactoryTest::PlatformMouseEventBuilder::PlatformMouseEventBuilder(
-    WebPointerProperties::PointerType pointerType, int id)
+    WebPointerProperties::PointerType pointerType, int id,
+    PlatformEvent::Modifiers modifiers)
 {
     m_pointerProperties.pointerType = pointerType;
     m_pointerProperties.id = id;
+    m_modifiers = modifiers;
 }
 
 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckTouchCancel(
     WebPointerProperties::PointerType pointerType, int rawId,
-    int uniqueId, bool isPrimary)
+    int uniqueId, bool isPrimary,
+    PlatformTouchPoint::State state)
 {
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.createPointerCancel(
-        PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId));
+        PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId, state));
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
     return pointerEvent;
 }
 
+void PointerEventFactoryTest::cloneAndCheckPointerEvent(
+    PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent,
+    const AtomicString& type)
+{
+    RefPtrWillBeRawPtr<PointerEvent> clonePointerEvent =
+        m_pointerEventFactory.create(pointerEvent, type, nullptr);
+    EXPECT_EQ(clonePointerEvent->pointerType(), pointerEvent->pointerType());
+    EXPECT_EQ(clonePointerEvent->pointerId(), pointerEvent->pointerId());
+    EXPECT_EQ(clonePointerEvent->isPrimary(), pointerEvent->isPrimary());
+    EXPECT_EQ(clonePointerEvent->type(), type);
+}
+
 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckTouchEvent(
-    WebPointerProperties::PointerType pointerType, int rawId,
-    int uniqueId, bool isPrimary)
+    WebPointerProperties::PointerType pointerType,
+    int rawId, int uniqueId, bool isPrimary,
+    PlatformTouchPoint::State state)
 {
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create(
-        EventTypeNames::pointerdown, PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId), PlatformEvent::NoModifiers, 0, 0, 0, 0);
+        EventTypeNames::pointerdown, PointerEventFactoryTest::PlatformTouchPointBuilder(pointerType, rawId, state), PlatformEvent::NoModifiers, 0, 0, 0, 0);
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
     return pointerEvent;
 }
 
 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactoryTest::createAndCheckMouseEvent(
-    WebPointerProperties::PointerType pointerType, int rawId, int uniqueId, bool isPrimary)
+    WebPointerProperties::PointerType pointerType,
+    int rawId, int uniqueId, bool isPrimary,
+    PlatformEvent::Modifiers modifiers)
 {
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create(
-        EventTypeNames::pointerenter, PlatformMouseEventBuilder(pointerType, rawId), nullptr, nullptr);
+        EventTypeNames::mouseenter, PlatformMouseEventBuilder(pointerType, rawId, modifiers), nullptr, nullptr);
     EXPECT_EQ(uniqueId, pointerEvent->pointerId());
     EXPECT_EQ(isPrimary, pointerEvent->isPrimary());
     return pointerEvent;
@@ -96,18 +123,33 @@
 
 TEST_F(PointerEventFactoryTest, MousePointer)
 {
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_expectedMouseId));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_expectedMouseId));
+
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
-    RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
+    RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true, PlatformEvent::LeftButtonDown);
+
+    cloneAndCheckPointerEvent(pointerEvent1, EventTypeNames::pointerout);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_expectedMouseId));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_expectedMouseId));
 
     m_pointerEventFactory.remove(pointerEvent1);
 
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_expectedMouseId));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_expectedMouseId));
+
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true);
 
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_expectedMouseId));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_expectedMouseId));
+
     m_pointerEventFactory.remove(pointerEvent1);
     m_pointerEventFactory.remove(pointerEvent2);
 
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 1, m_expectedMouseId, true);
     createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 20, m_expectedMouseId, true);
+
 }
 
 TEST_F(PointerEventFactoryTest, TouchPointerPrimaryRemovedWhileAnotherIsThere)
@@ -123,12 +165,30 @@
 
 TEST_F(PointerEventFactoryTest, TouchPointerReleasedAndPressedAgain)
 {
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+1, false);
 
+    cloneAndCheckPointerEvent(pointerEvent1, EventTypeNames::pointerleave);
+    cloneAndCheckPointerEvent(pointerEvent2, EventTypeNames::pointerenter);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     m_pointerEventFactory.remove(pointerEvent1);
     m_pointerEventFactory.remove(pointerEvent2);
 
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mappedIdStart+2, true);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+3, false);
 
@@ -139,22 +199,49 @@
 
 TEST_F(PointerEventFactoryTest, TouchAndDrag)
 {
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
-    createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+
+    createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true, PlatformTouchPoint::TouchReleased);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
 
     m_pointerEventFactory.remove(pointerEvent1);
     m_pointerEventFactory.remove(pointerEvent2);
 
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart));
+
+
+    EXPECT_FALSE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+1, true);
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+1, true);
 
     // Remove an obsolete (i.e. already removed) pointer event which should have no effect
     m_pointerEventFactory.remove(pointerEvent1);
 
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+1, true);
     createAndCheckTouchCancel(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+1, true);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_FALSE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
+
     createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mappedIdStart+1, true);
+
+    EXPECT_TRUE(m_pointerEventFactory.isActive(m_mappedIdStart+1));
+    EXPECT_TRUE(m_pointerEventFactory.isActiveButtonsState(m_mappedIdStart+1));
 }
 
 TEST_F(PointerEventFactoryTest, MouseAndTouchAndPen)
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
index 50649c2..eaef68a 100644
--- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
@@ -32,7 +32,6 @@
 #include "core/fetch/ResourceFetcher.h"
 #include "core/fetch/StyleSheetResourceClient.h"
 #include "platform/SharedBuffer.h"
-#include "platform/network/HTTPParsers.h"
 #include "wtf/CurrentTime.h"
 
 namespace blink {
@@ -105,11 +104,6 @@
     return decodedText();
 }
 
-const AtomicString CSSStyleSheetResource::mimeType() const
-{
-    return extractMIMETypeFromMediaType(response().httpHeaderField(HTTPNames::Content_Type)).lower();
-}
-
 void CSSStyleSheetResource::checkNotify()
 {
     // Decode the data to find out the encoding and keep the sheet text around during checkNotify()
@@ -153,7 +147,8 @@
     // folks can use standards mode for local HTML documents.
     if (mimeTypeCheck == MIMETypeCheck::Lax)
         return true;
-    return mimeType().isEmpty() || equalIgnoringCase(mimeType(), "text/css") || equalIgnoringCase(mimeType(), "application/x-unknown-content-type");
+    AtomicString contentType = httpContentType();
+    return contentType.isEmpty() || equalIgnoringCase(contentType, "text/css") || equalIgnoringCase(contentType, "application/x-unknown-content-type");
 }
 
 PassRefPtrWillBeRawPtr<StyleSheetContents> CSSStyleSheetResource::restoreParsedStyleSheet(const CSSParserContext& context)
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h
index 8f6d75e1..9310f4d 100644
--- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h
+++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h
@@ -50,8 +50,6 @@
 
     const String sheetText(MIMETypeCheck = MIMETypeCheck::Strict) const;
 
-    const AtomicString mimeType() const;
-
     void didAddClient(ResourceClient*) override;
 
     PassRefPtrWillBeRawPtr<StyleSheetContents> restoreParsedStyleSheet(const CSSParserContext&);
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResource.cpp b/third_party/WebKit/Source/core/fetch/DocumentResource.cpp
index aab75f7..d076e1ad 100644
--- a/third_party/WebKit/Source/core/fetch/DocumentResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/DocumentResource.cpp
@@ -67,7 +67,7 @@
 
 void DocumentResource::checkNotify()
 {
-    if (m_data) {
+    if (m_data && mimeTypeAllowed()) {
         StringBuilder decodedText;
         decodedText.append(m_decoder->decode(m_data->data(), m_data->size()));
         decodedText.append(m_decoder->flush());
@@ -78,6 +78,18 @@
     Resource::checkNotify();
 }
 
+bool DocumentResource::mimeTypeAllowed() const
+{
+    ASSERT(type() == SVGDocument);
+    AtomicString mimeType = response().mimeType();
+    if (response().isHTTP())
+        mimeType = httpContentType();
+    return mimeType == "image/svg+xml"
+        || mimeType == "text/xml"
+        || mimeType == "application/xml"
+        || mimeType == "application/xhtml+xml";
+}
+
 PassRefPtrWillBeRawPtr<Document> DocumentResource::createDocument(const KURL& url)
 {
     switch (type()) {
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResource.h b/third_party/WebKit/Source/core/fetch/DocumentResource.h
index 296ca45..6543379 100644
--- a/third_party/WebKit/Source/core/fetch/DocumentResource.h
+++ b/third_party/WebKit/Source/core/fetch/DocumentResource.h
@@ -60,6 +60,7 @@
     };
     DocumentResource(const ResourceRequest&, Type);
 
+    bool mimeTypeAllowed() const;
     PassRefPtrWillBeRawPtr<Document> createDocument(const KURL&);
 
     RefPtrWillBeMember<Document> m_document;
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
index fb32fc9..29b0e845 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -35,6 +35,7 @@
 #include "platform/Logging.h"
 #include "platform/SharedBuffer.h"
 #include "platform/TraceEvent.h"
+#include "platform/network/HTTPParsers.h"
 #include "platform/weborigin/KURL.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebProcessMemoryDump.h"
@@ -318,6 +319,11 @@
         m_status = Cached;
 }
 
+AtomicString Resource::httpContentType() const
+{
+    return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPNames::Content_Type).lower());
+}
+
 bool Resource::passesAccessControlCheck(SecurityOrigin* securityOrigin) const
 {
     String ignoredErrorDescription;
diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h
index 03bdb79..8cdaa7d4 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.h
+++ b/third_party/WebKit/Source/core/fetch/Resource.h
@@ -210,6 +210,8 @@
     AtomicString accept() const { return m_accept; }
     void setAccept(const AtomicString& accept) { m_accept = accept; }
 
+    AtomicString httpContentType() const;
+
     bool wasCanceled() const { return m_error.isCancellation(); }
     bool errorOccurred() const { return m_status == LoadError || m_status == DecodeError; }
     bool loadFailedOrCanceled() { return !m_error.isNull(); }
diff --git a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
index 2b5eaed..15b6d993 100644
--- a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
@@ -32,7 +32,6 @@
 #include "core/fetch/ResourceFetcher.h"
 #include "platform/MIMETypeRegistry.h"
 #include "platform/SharedBuffer.h"
-#include "platform/network/HTTPParsers.h"
 #include "public/platform/WebProcessMemoryDump.h"
 
 namespace blink {
@@ -85,11 +84,6 @@
     memoryDump->addSuballocation(dump->guid(), String(WTF::Partitions::kAllocatedObjectPoolName));
 }
 
-AtomicString ScriptResource::mimeType() const
-{
-    return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPNames::Content_Type)).lower();
-}
-
 const CompressibleString& ScriptResource::script()
 {
     ASSERT(!isPurgeable());
@@ -115,7 +109,7 @@
 
 bool ScriptResource::mimeTypeAllowedByNosniff() const
 {
-    return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPNames::X_Content_Type_Options)) != ContentTypeOptionsNosniff || MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType());
+    return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPNames::X_Content_Type_Options)) != ContentTypeOptionsNosniff || MIMETypeRegistry::isSupportedJavaScriptMIMEType(httpContentType());
 }
 
 void ScriptResource::setIntegrityDisposition(ScriptIntegrityDisposition disposition)
diff --git a/third_party/WebKit/Source/core/fetch/ScriptResource.h b/third_party/WebKit/Source/core/fetch/ScriptResource.h
index a97b8c3..a9426b26 100644
--- a/third_party/WebKit/Source/core/fetch/ScriptResource.h
+++ b/third_party/WebKit/Source/core/fetch/ScriptResource.h
@@ -74,8 +74,6 @@
 
     const CompressibleString& script();
 
-    AtomicString mimeType() const;
-
     bool mimeTypeAllowedByNosniff() const;
 
     void setIntegrityMetadata(const IntegrityMetadataSet& metadata) { m_integrityMetadata = metadata; }
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.idl b/third_party/WebKit/Source/core/fileapi/FileReader.idl
index ee8f93ef..9e9c30cb 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReader.idl
+++ b/third_party/WebKit/Source/core/fileapi/FileReader.idl
@@ -33,7 +33,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
index 31187d8..8808be2 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -29,11 +29,11 @@
 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
 #include "bindings/core/v8/ScriptController.h"
 #include "bindings/core/v8/ScriptEventListener.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "core/HTMLNames.h"
 #include "core/css/MediaList.h"
 #include "core/dom/Attribute.h"
 #include "core/dom/ElementTraversal.h"
-#include "core/dom/ExceptionCode.h"
 #include "core/dom/Fullscreen.h"
 #include "core/dom/shadow/ShadowRoot.h"
 #include "core/events/Event.h"
@@ -347,6 +347,8 @@
     , m_audioTracks(AudioTrackList::create(*this))
     , m_videoTracks(VideoTrackList::create(*this))
     , m_textTracks(nullptr)
+    , m_playPromiseResolveTask(CancellableTaskFactory::create(this, &HTMLMediaElement::resolvePlayPromises))
+    , m_playPromiseRejectTask(CancellableTaskFactory::create(this, &HTMLMediaElement::rejectPlayPromises))
     , m_audioSourceNode(nullptr)
     , m_autoplayHelper(*this)
 {
@@ -741,6 +743,8 @@
     // one of the task queues, then remove those tasks.
     cancelPendingEventsAndCallbacks();
 
+    rejectPlayPromises(AbortError, "The play() request was interrupted by a new load request.");
+
     // 3 - If the media element's networkState is set to NETWORK_LOADING or NETWORK_IDLE, queue
     // a task to fire a simple event named abort at the media element.
     if (m_networkState == NETWORK_LOADING || m_networkState == NETWORK_IDLE)
@@ -1253,33 +1257,33 @@
     m_loadState = WaitingForSource;
     m_currentSourceNode = nullptr;
 
-    // 4.8.10.5
-    // 6 - Reaching this step indicates that the media resource failed to load or that the given
-    // URL could not be resolved. In one atomic operation, run the following steps:
+    // 4.8.13.5
+    // The dedicated media source failure steps are the following steps:
 
-    // 6.1 - Set the error attribute to a new MediaError object whose code attribute is set to
+    // 1 - Set the error attribute to a new MediaError object whose code attribute is set to
     // MEDIA_ERR_SRC_NOT_SUPPORTED.
     m_error = MediaError::create(MediaError::MEDIA_ERR_SRC_NOT_SUPPORTED);
 
-    // 6.2 - Forget the media element's media-resource-specific text tracks.
+    // 2 - Forget the media element's media-resource-specific text tracks.
     forgetResourceSpecificTracks();
 
-    // 6.3 - Set the element's networkState attribute to the NETWORK_NO_SOURCE value.
+    // 3 - Set the element's networkState attribute to the NETWORK_NO_SOURCE value.
     setNetworkState(NETWORK_NO_SOURCE);
 
-    // 7 - Queue a task to fire a simple event named error at the media element.
+    // 4 - Set the element's show poster flag to true.
+    updateDisplayState();
+
+    // 5 - Fire a simple event named error at the media element.
     scheduleEvent(EventTypeNames::error);
 
+    // 6 - Reject pending play promises with NotSupportedError.
+    scheduleRejectPlayPromises(NotSupportedError);
+
     closeMediaSource();
 
-    // 8 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event.
+    // 7 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event.
     setShouldDelayLoadEvent(false);
 
-    // 9 - Abort these steps. Until the load() method is invoked or the src attribute is changed,
-    // the element won't attempt to load another resource.
-
-    updateDisplayState();
-
     if (layoutObject())
         layoutObject()->updateFromElement();
 }
@@ -1317,6 +1321,9 @@
 
     for (HTMLSourceElement* source = Traversal<HTMLSourceElement>::firstChild(*this); source; source = Traversal<HTMLSourceElement>::nextSibling(*source))
         source->cancelPendingErrorEvent();
+
+    m_playPromiseResolveTask->cancel();
+    m_playPromiseRejectTask->cancel();
 }
 
 void HTMLMediaElement::networkStateChanged()
@@ -1528,7 +1535,7 @@
     if (m_readyState == HAVE_FUTURE_DATA && oldState <= HAVE_CURRENT_DATA && tracksAreReady) {
         scheduleEvent(EventTypeNames::canplay);
         if (isPotentiallyPlaying)
-            scheduleEvent(EventTypeNames::playing);
+            scheduleNotifyPlaying();
         shouldUpdateDisplayState = true;
     }
 
@@ -1536,7 +1543,7 @@
         if (oldState <= HAVE_CURRENT_DATA) {
             scheduleEvent(EventTypeNames::canplay);
             if (isPotentiallyPlaying)
-                scheduleEvent(EventTypeNames::playing);
+                scheduleNotifyPlaying();
         }
 
         // Check for autoplay, and record metrics about it if needed.
@@ -1549,7 +1556,7 @@
                 m_paused = false;
                 invalidateCachedTime();
                 scheduleEvent(EventTypeNames::play);
-                scheduleEvent(EventTypeNames::playing);
+                scheduleNotifyPlaying();
                 m_autoplaying = false;
             }
         }
@@ -1702,6 +1709,8 @@
     scheduleEvent(EventTypeNames::seeked);
 
     setDisplayMode(Video);
+
+    Platform::current()->recordAction(UserMetricsAction("Media_Seeked"));
 }
 
 HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const
@@ -1941,7 +1950,32 @@
     return autoplay() ? WebMediaPlayer::PreloadAuto : preloadType();
 }
 
-void HTMLMediaElement::play()
+ScriptPromise HTMLMediaElement::playForBindings(ScriptState* scriptState)
+{
+    Nullable<ExceptionCode> code = play();
+    if (!code.isNull()) {
+        String message;
+        switch (code.get()) {
+        case NotAllowedError:
+            message = "play() can only be initiated by a user gesture.";
+            break;
+        case NotSupportedError:
+            message = "The element has no supported sources.";
+            break;
+        default:
+            ASSERT_NOT_REACHED();
+        }
+        return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(code.get(), message));
+    }
+
+    ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
+    ScriptPromise promise = resolver->promise();
+
+    m_playResolvers.append(resolver);
+    return promise;
+}
+
+Nullable<ExceptionCode> HTMLMediaElement::play()
 {
     WTF_LOG(Media, "HTMLMediaElement::play(%p)", this);
 
@@ -1954,15 +1988,23 @@
             recordAutoplayMetric(PlayMethodFailed);
             String message = ExceptionMessages::failedToExecute("play", "HTMLMediaElement", "API can only be initiated by a user gesture.");
             document().addConsoleMessage(ConsoleMessage::create(JSMessageSource, WarningMessageLevel, message));
-            return;
+            return NotAllowedError;
         }
-    } else if (m_userGestureRequiredForPlay) {
-        if (m_autoplayMediaCounted)
-            recordAutoplayMetric(AutoplayManualStart);
-        m_userGestureRequiredForPlay = false;
+    } else {
+        Platform::current()->recordAction(UserMetricsAction("Media_Play_WithGesture"));
+        if (m_userGestureRequiredForPlay) {
+            if (m_autoplayMediaCounted)
+                recordAutoplayMetric(AutoplayManualStart);
+            m_userGestureRequiredForPlay = false;
+        }
     }
 
+    if (m_error && m_error->code() == MediaError::MEDIA_ERR_SRC_NOT_SUPPORTED)
+        return NotSupportedError;
+
     playInternal();
+
+    return nullptr;
 }
 
 void HTMLMediaElement::playInternal()
@@ -1993,8 +2035,11 @@
         if (m_readyState <= HAVE_CURRENT_DATA)
             scheduleEvent(EventTypeNames::waiting);
         else if (m_readyState >= HAVE_FUTURE_DATA)
-            scheduleEvent(EventTypeNames::playing);
+            scheduleNotifyPlaying();
+    } else if (m_readyState >= HAVE_FUTURE_DATA) {
+        scheduleResolvePlayPromises();
     }
+
     m_autoplaying = false;
 
     updatePlayState();
@@ -2049,6 +2094,7 @@
         m_paused = true;
         scheduleTimeupdateEvent(false);
         scheduleEvent(EventTypeNames::pause);
+        scheduleRejectPlayPromises(AbortError);
     }
 
     updatePlayState();
@@ -2058,12 +2104,14 @@
 {
     ASSERT(m_remoteRoutesAvailable);
     webMediaPlayer()->requestRemotePlayback();
+    Platform::current()->recordAction(UserMetricsAction("Media_RequestRemotePlayback"));
 }
 
 void HTMLMediaElement::requestRemotePlaybackControl()
 {
     ASSERT(m_remoteRoutesAvailable);
     webMediaPlayer()->requestRemotePlaybackControl();
+    Platform::current()->recordAction(UserMetricsAction("Media_RequestRemotePlayback_Control"));
 }
 
 void HTMLMediaElement::closeMediaSource()
@@ -2131,6 +2179,8 @@
         return;
     }
 
+    Platform::current()->recordAction(UserMetricsAction("Media_SetVolume"));
+
     m_volume = vol;
     updateVolume();
     scheduleEvent(EventTypeNames::volumechange);
@@ -2154,6 +2204,11 @@
 
     updateVolume();
 
+    if (muted)
+        Platform::current()->recordAction(UserMetricsAction("Media_Playback_Mute_On"));
+    else
+        Platform::current()->recordAction(UserMetricsAction("Media_Playback_Mute_Off"));
+
     scheduleEvent(EventTypeNames::volumechange);
 }
 
@@ -2755,6 +2810,7 @@
                 scheduleEvent(EventTypeNames::ended);
             }
             recordMetricsIfPausing();
+            Platform::current()->recordAction(UserMetricsAction("Media_Playback_Ended"));
         }
     } else {
         m_sentEndEvent = false;
@@ -2961,6 +3017,8 @@
             webMediaPlayer()->setRate(playbackRate());
             updateVolume();
             webMediaPlayer()->play();
+            Platform::current()->recordAction(
+                UserMetricsAction("Media_Playback_Started"));
         }
 
         if (mediaControls())
@@ -2970,8 +3028,11 @@
         recordAutoplayMetric(AnyPlaybackStarted);
 
     } else { // Should not be playing right now
-        if (isPlaying)
+        if (isPlaying) {
             webMediaPlayer()->pause();
+            Platform::current()->recordAction(UserMetricsAction("Media_Paused"));
+        }
+
         refreshCachedTime();
 
         m_playbackProgressTimer.stop();
@@ -3513,6 +3574,7 @@
     visitor->trace(m_cueTimeline);
     visitor->trace(m_textTracks);
     visitor->trace(m_textTracksWhenResourceSelectionBegan);
+    visitor->trace(m_playResolvers);
     visitor->trace(m_audioSourceProvider);
     visitor->template registerWeakMembers<HTMLMediaElement, &HTMLMediaElement::clearWeakMembers>(this);
     visitor->trace(m_autoplayHelper);
@@ -3590,6 +3652,69 @@
     m_autoplayHelper.triggerAutoplayViewportCheckForTesting();
 }
 
+void HTMLMediaElement::scheduleResolvePlayPromises()
+{
+    // Per spec, if there are two tasks in the queue, the first task will remove
+    // all the pending promises making the second task useless unless a promise
+    // can be added between the first and second task being run which is not
+    // possible at the moment.
+    if (m_playPromiseResolveTask->isPending())
+        return;
+
+    Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE, m_playPromiseResolveTask->cancelAndCreate());
+}
+
+void HTMLMediaElement::scheduleRejectPlayPromises(ExceptionCode code)
+{
+    // Per spec, if there are two tasks in the queue, the first task will remove
+    // all the pending promises making the second task useless unless a promise
+    // can be added between the first and second task being run which is not
+    // possible at the moment.
+    if (m_playPromiseRejectTask->isPending())
+        return;
+
+    // TODO(mlamouri): because cancellable tasks can't take parameters, the
+    // error code needs to be saved.
+    m_playPromiseErrorCode = code;
+    Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE, m_playPromiseRejectTask->cancelAndCreate());
+}
+
+void HTMLMediaElement::scheduleNotifyPlaying()
+{
+    scheduleEvent(EventTypeNames::playing);
+    scheduleResolvePlayPromises();
+}
+
+void HTMLMediaElement::resolvePlayPromises()
+{
+    for (auto& resolver: m_playResolvers)
+        resolver->resolve();
+
+    m_playResolvers.clear();
+}
+
+void HTMLMediaElement::rejectPlayPromises()
+{
+    // TODO(mlamouri): the message is generated based on the code because
+    // arguments can't be passed to a cancellable task. In order to save space
+    // used by the object, the string isn't saved.
+    ASSERT(m_playPromiseErrorCode == AbortError || m_playPromiseErrorCode == NotSupportedError);
+    if (m_playPromiseErrorCode == AbortError)
+        rejectPlayPromises(AbortError, "The play() request was interrupted by a call to pause().");
+    else
+        rejectPlayPromises(NotSupportedError, "Failed to load because no supported source was found.");
+}
+
+void HTMLMediaElement::rejectPlayPromises(ExceptionCode code, const String& message)
+{
+    ASSERT(code == AbortError || code == NotSupportedError);
+
+    for (auto& resolver: m_playResolvers)
+        resolver->reject(DOMException::create(code, message));
+
+    m_playResolvers.clear();
+}
+
 void HTMLMediaElement::clearWeakMembers(Visitor* visitor)
 {
     if (!Heap::isHeapObjectAlive(m_audioSourceNode))
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
index 610750d1..f2a10fc 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
@@ -26,8 +26,10 @@
 #ifndef HTMLMediaElement_h
 #define HTMLMediaElement_h
 
+#include "bindings/core/v8/ScriptPromise.h"
 #include "core/CoreExport.h"
 #include "core/dom/ActiveDOMObject.h"
+#include "core/dom/ExceptionCode.h"
 #include "core/events/GenericEventQueue.h"
 #include "core/html/AutoplayExperimentHelper.h"
 #include "core/html/HTMLElement.h"
@@ -52,6 +54,7 @@
 class MediaControls;
 class MediaError;
 class HTMLMediaSource;
+class ScriptState;
 class TextTrackContainer;
 class TextTrackList;
 class TimeRanges;
@@ -140,7 +143,8 @@
     bool shouldAutoplay(const RecordMetricsBehavior = RecordMetricsBehavior::DoNotRecord);
     bool loop() const;
     void setLoop(bool);
-    void play();
+    ScriptPromise playForBindings(ScriptState*);
+    Nullable<ExceptionCode> play();
     void pause();
     void requestRemotePlayback();
     void requestRemotePlaybackControl();
@@ -449,6 +453,16 @@
     // TODO(liberato): remove once autoplay gesture override experiment concludes.
     void triggerAutoplayViewportCheckForTesting();
 
+    void scheduleResolvePlayPromises();
+    void scheduleRejectPlayPromises(ExceptionCode);
+    void scheduleNotifyPlaying();
+
+    void resolvePlayPromises();
+    // TODO(mlamouri): this is used for cancellable tasks because we can't pass
+    // parameters.
+    void rejectPlayPromises();
+    void rejectPlayPromises(ExceptionCode, const String&);
+
     UnthrottledTimer<HTMLMediaElement> m_loadTimer;
     UnthrottledTimer<HTMLMediaElement> m_progressEventTimer;
     UnthrottledTimer<HTMLMediaElement> m_playbackProgressTimer;
@@ -557,6 +571,11 @@
 
     OwnPtrWillBeMember<CueTimeline> m_cueTimeline;
 
+    PersistentHeapVectorWillBeHeapVector<Member<ScriptPromiseResolver>> m_playResolvers;
+    OwnPtr<CancellableTaskFactory> m_playPromiseResolveTask;
+    OwnPtr<CancellableTaskFactory> m_playPromiseRejectTask;
+    ExceptionCode m_playPromiseErrorCode;
+
     // This is a weak reference, since m_audioSourceNode holds a reference to us.
     // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem.
     GC_PLUGIN_IGNORE("http://crbug.com/404577")
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.idl b/third_party/WebKit/Source/core/html/HTMLMediaElement.idl
index 9a13393..297f2a08 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.idl
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.idl
@@ -27,7 +27,7 @@
 
 enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=Media,
 ] interface HTMLMediaElement : HTMLElement {
 
@@ -71,7 +71,7 @@
     readonly attribute boolean ended;
     [Reflect] attribute boolean autoplay;
     [Reflect] attribute boolean loop;
-    void play();
+    [CallWith=ScriptState, ImplementedAs=playForBindings] Promise<void> play();
     void pause();
 
     // controls
diff --git a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp
index 1043371..c10022b 100644
--- a/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLPlugInElement.cpp
@@ -38,6 +38,7 @@
 #include "core/html/HTMLImageLoader.h"
 #include "core/html/PluginDocument.h"
 #include "core/input/EventHandler.h"
+#include "core/inspector/ConsoleMessage.h"
 #include "core/layout/LayoutBlockFlow.h"
 #include "core/layout/LayoutEmbeddedObject.h"
 #include "core/layout/LayoutImage.h"
@@ -205,6 +206,10 @@
     ASSERT(document().frame()->loader().client()->canCreatePluginWithoutRenderer(m_serviceType));
 
     KURL url;
+    // CSP can block src-less objects.
+    if (!allowedToLoadObject(url, m_serviceType))
+        return;
+
     Vector<String> paramNames;
     Vector<String> paramValues;
 
@@ -474,24 +479,27 @@
         return false;
 
     KURL completedURL = url.isEmpty() ? KURL() : document().completeURL(url);
-    if (!pluginIsLoadable(completedURL, mimeType))
+    if (!allowedToLoadObject(completedURL, mimeType))
         return false;
 
     bool useFallback;
-    if (shouldUsePlugin(completedURL, mimeType, hasFallbackContent(), useFallback))
-        return loadPlugin(completedURL, mimeType, paramNames, paramValues, useFallback, true);
+    if (!shouldUsePlugin(completedURL, mimeType, hasFallbackContent(), useFallback)) {
+        // If the plugin element already contains a subframe,
+        // loadOrRedirectSubframe will re-use it. Otherwise, it will create a
+        // new frame and set it as the LayoutPart's widget, causing what was
+        // previously in the widget to be torn down.
+        return loadOrRedirectSubframe(completedURL, getNameAttribute(), true);
+    }
 
-    // If the plugin element already contains a subframe,
-    // loadOrRedirectSubframe will re-use it. Otherwise, it will create a new
-    // frame and set it as the LayoutPart's widget, causing what was previously
-    // in the widget to be torn down.
-    return loadOrRedirectSubframe(completedURL, getNameAttribute(), true);
+    return loadPlugin(completedURL, mimeType, paramNames, paramValues, useFallback, true);
 }
 
 bool HTMLPlugInElement::loadPlugin(const KURL& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback, bool requireLayoutObject)
 {
-    LocalFrame* frame = document().frame();
+    if (!allowedToLoadPlugin(url, mimeType))
+        return false;
 
+    LocalFrame* frame = document().frame();
     if (!frame->loader().allowPlugins(AboutToInstantiatePlugin))
         return false;
 
@@ -541,8 +549,10 @@
     if (document().frame()->page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) {
         const PluginData* pluginData = document().frame()->page()->pluginData();
         String pluginName = pluginData ? pluginData->pluginNameForMimeType(mimeType) : String();
-        if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", TextCaseInsensitive))
+        if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", TextCaseInsensitive)) {
+            useFallback = false;
             return true;
+        }
     }
 
     ObjectContentType objectType = document().frame()->loader().client()->objectContentType(url, mimeType, shouldPreferPlugInsForImages());
@@ -561,7 +571,7 @@
         dispatchEvent(Event::create(EventTypeNames::error));
 }
 
-bool HTMLPlugInElement::pluginIsLoadable(const KURL& url, const String& mimeType)
+bool HTMLPlugInElement::allowedToLoadObject(const KURL& url, const String& mimeType)
 {
     if (url.isEmpty() && mimeType.isEmpty())
         return false;
@@ -574,9 +584,6 @@
     if (MIMETypeRegistry::isJavaAppletMIMEType(mimeType))
         return false;
 
-    if (document().isSandboxed(SandboxPlugins))
-        return false;
-
     if (!document().securityOrigin()->canDisplay(url)) {
         FrameLoader::reportLocalLoadFailed(frame, url.string());
         return false;
@@ -590,10 +597,21 @@
         layoutEmbeddedObject()->setPluginUnavailabilityReason(LayoutEmbeddedObject::PluginBlockedByContentSecurityPolicy);
         return false;
     }
-
+    // If the URL is empty, a plugin could still be instantiated if a MIME-type
+    // is specified.
     return (!mimeType.isEmpty() && url.isEmpty()) || !MixedContentChecker::shouldBlockFetch(frame, WebURLRequest::RequestContextObject, WebURLRequest::FrameTypeNone, url);
 }
 
+bool HTMLPlugInElement::allowedToLoadPlugin(const KURL& url, const String& mimeType)
+{
+    if (document().isSandboxed(SandboxPlugins)) {
+        document().addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel,
+            "Failed to load '" + url.elidedString() + "' as a plugin, because the frame into which the plugin is loading is sandboxed."));
+        return false;
+    }
+    return true;
+}
+
 void HTMLPlugInElement::didAddUserAgentShadowRoot(ShadowRoot&)
 {
     userAgentShadowRoot()->appendChild(HTMLContentElement::create(document()));
diff --git a/third_party/WebKit/Source/core/html/HTMLPlugInElement.h b/third_party/WebKit/Source/core/html/HTMLPlugInElement.h
index e42c201..131caae8 100644
--- a/third_party/WebKit/Source/core/html/HTMLPlugInElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLPlugInElement.h
@@ -129,7 +129,11 @@
     virtual void updateWidgetInternal() = 0;
 
     bool loadPlugin(const KURL&, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback, bool requireLayoutObject);
-    bool pluginIsLoadable(const KURL&, const String& mimeType);
+    // Perform checks after we have determined that a plugin will be used to
+    // show the object (i.e after allowedToLoadObject).
+    bool allowedToLoadPlugin(const KURL&, const String& mimeType);
+    // Perform checks based on the URL and MIME-type of the object to load.
+    bool allowedToLoadObject(const KURL&, const String& mimeType);
     bool wouldLoadAsNetscapePlugin(const String& url, const String& serviceType);
 
     void setPersistedPluginWidget(Widget*);
diff --git a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp
new file mode 100644
index 0000000..c227f47
--- /dev/null
+++ b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.cpp
@@ -0,0 +1,35 @@
+// 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 "core/html/canvas/OffscreenCanvas.h"
+
+#include "wtf/MathExtras.h"
+
+namespace blink {
+
+OffscreenCanvas* OffscreenCanvas::create(unsigned width, unsigned height)
+{
+    return new OffscreenCanvas(IntSize(clampTo<int>(width), clampTo<int>(height)));
+}
+
+void OffscreenCanvas::setWidth(unsigned width)
+{
+    m_size.setWidth(clampTo<int>(width));
+}
+
+void OffscreenCanvas::setHeight(unsigned height)
+{
+    m_size.setHeight(clampTo<int>(height));
+}
+
+OffscreenCanvas::OffscreenCanvas(const IntSize& size)
+    : m_size(size)
+{
+}
+
+DEFINE_TRACE(OffscreenCanvas)
+{
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.h b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.h
similarity index 69%
rename from third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.h
rename to third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.h
index f61f156c..a9a14b2 100644
--- a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.h
+++ b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.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 OffscreenCanvasTemp_h
-#define OffscreenCanvasTemp_h
+#ifndef OffscreenCanvas_h
+#define OffscreenCanvas_h
 
 #include "bindings/core/v8/ScriptPromise.h"
 #include "bindings/core/v8/ScriptState.h"
@@ -14,10 +14,10 @@
 
 namespace blink {
 
-class CORE_EXPORT OffscreenCanvasTemp final : public GarbageCollectedFinalized<OffscreenCanvasTemp>, public ScriptWrappable {
+class CORE_EXPORT OffscreenCanvas final : public GarbageCollectedFinalized<OffscreenCanvas>, public ScriptWrappable {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static OffscreenCanvasTemp* create(unsigned width, unsigned height);
+    static OffscreenCanvas* create(unsigned width, unsigned height);
 
     IntSize size() const { return m_size; }
     unsigned width() const { return m_size.width(); }
@@ -29,11 +29,11 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    OffscreenCanvasTemp(const IntSize&);
+    OffscreenCanvas(const IntSize&);
 
     IntSize m_size;
 };
 
 } // namespace blink
 
-#endif // OffscreenCanvasTemp_h
+#endif // OffscreenCanvas_h
diff --git a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.idl b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.idl
similarity index 92%
rename from third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.idl
rename to third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.idl
index f94cdde2..be5bf91 100644
--- a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.idl
+++ b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvas.idl
@@ -7,7 +7,7 @@
     GarbageCollected,
     Exposed=(Window,Worker),
     RuntimeEnabled=ExperimentalCanvasFeatures,
-] interface OffscreenCanvasTemp {
+] interface OffscreenCanvas {
     [EnforceRange] attribute unsigned long width;
     [EnforceRange] attribute unsigned long height;
 };
diff --git a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.cpp b/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.cpp
deleted file mode 100644
index 772c16d..0000000
--- a/third_party/WebKit/Source/core/html/canvas/OffscreenCanvasTemp.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "core/html/canvas/OffscreenCanvasTemp.h"
-
-#include "wtf/MathExtras.h"
-
-namespace blink {
-
-OffscreenCanvasTemp* OffscreenCanvasTemp::create(unsigned width, unsigned height)
-{
-    return new OffscreenCanvasTemp(IntSize(clampTo<int>(width), clampTo<int>(height)));
-}
-
-void OffscreenCanvasTemp::setWidth(unsigned width)
-{
-    m_size.setWidth(clampTo<int>(width));
-}
-
-void OffscreenCanvasTemp::setHeight(unsigned height)
-{
-    m_size.setHeight(clampTo<int>(height));
-}
-
-OffscreenCanvasTemp::OffscreenCanvasTemp(const IntSize& size)
-    : m_size(size)
-{
-}
-
-DEFINE_TRACE(OffscreenCanvasTemp)
-{
-}
-
-} // namespace blink
diff --git a/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp b/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
index 5a3a306c..7b2c745e 100644
--- a/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
@@ -38,6 +38,7 @@
 #include "core/input/EventHandler.h"
 #include "core/layout/LayoutTextControlSingleLine.h"
 #include "core/layout/LayoutView.h"
+#include "core/layout/api/LayoutTextControlItem.h"
 #include "platform/UserGestureIndicator.h"
 
 namespace blink {
@@ -140,8 +141,8 @@
     LayoutObject* parentLayoutObject = shadowHost()->layoutObject();
     if (!parentLayoutObject || !parentLayoutObject->isTextControl())
         return originalStyleForLayoutObject();
-    LayoutTextControl* textControlLayoutObject = toLayoutTextControl(parentLayoutObject);
-    return textControlLayoutObject->createInnerEditorStyle(textControlLayoutObject->styleRef());
+    LayoutTextControlItem textControlLayoutItem = LayoutTextControlItem(toLayoutTextControl(parentLayoutObject));
+    return textControlLayoutItem.createInnerEditorStyle(textControlLayoutItem.styleRef());
 }
 
 // ----------------------------
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
index 49c45d67..00e78b0 100644
--- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
@@ -1,4 +1,4 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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.
 
@@ -31,27 +31,6 @@
     }
 }
 
-const AtomicString& pointerEventNameForMouseEventName(const AtomicString& mouseEventName)
-{
-#define RETURN_CORRESPONDING_PE_NAME(eventSuffix) \
-    if (mouseEventName == EventTypeNames::mouse##eventSuffix) {\
-        return EventTypeNames::pointer##eventSuffix;\
-    }
-
-    RETURN_CORRESPONDING_PE_NAME(down);
-    RETURN_CORRESPONDING_PE_NAME(enter);
-    RETURN_CORRESPONDING_PE_NAME(leave);
-    RETURN_CORRESPONDING_PE_NAME(move);
-    RETURN_CORRESPONDING_PE_NAME(out);
-    RETURN_CORRESPONDING_PE_NAME(over);
-    RETURN_CORRESPONDING_PE_NAME(up);
-
-#undef RETURN_CORRESPONDING_PE_NAME
-
-    ASSERT_NOT_REACHED();
-    return emptyAtom;
-}
-
 bool isInDocument(PassRefPtrWillBeRawPtr<EventTarget> n)
 {
     return n && n->toNode() && n->toNode()->inDocument();
@@ -115,7 +94,7 @@
 {
     // Pointer event type does not matter as it will be overridden in the sendNodeTransitionEvents
     sendNodeTransitionEvents(exitedNode, enteredNode,
-        m_pointerEventFactory.create(EventTypeNames::pointerout, mouseEvent, nullptr, view),
+        m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, nullptr, view),
         mouseEvent, true);
 }
 
@@ -308,18 +287,8 @@
     PassRefPtrWillBeRawPtr<Node> relatedTarget,
     PassRefPtrWillBeRawPtr<AbstractView> view)
 {
-    AtomicString pointerEventType =
-        pointerEventNameForMouseEventName(mouseEventType);
-    unsigned short pointerButtonsPressed =
-        MouseEvent::platformModifiersToButtons(mouseEvent.modifiers());
-
-    // Make sure chorded buttons fire pointermove instead of pointerup/pointerdown.
-    if ((pointerEventType == EventTypeNames::pointerdown && (pointerButtonsPressed & ~MouseEvent::buttonToButtons(mouseEvent.button())) != 0)
-        || (pointerEventType == EventTypeNames::pointerup && pointerButtonsPressed != 0))
-        pointerEventType = EventTypeNames::pointermove;
-
     RefPtrWillBeRawPtr<PointerEvent> pointerEvent =
-        m_pointerEventFactory.create(pointerEventType, mouseEvent,
+        m_pointerEventFactory.create(mouseEventType, mouseEvent,
         relatedTarget, view);
 
     RefPtrWillBeRawPtr<Node> effectiveTarget =
@@ -329,7 +298,7 @@
         dispatchPointerEvent(effectiveTarget, pointerEvent);
 
     if (result != WebInputEventResult::NotHandled
-        && pointerEventType == EventTypeNames::pointerdown)
+        && pointerEvent->type() == EventTypeNames::pointerdown)
         m_preventMouseEventForPointerTypeMouse = true;
 
     if (!m_preventMouseEventForPointerTypeMouse) {
diff --git a/third_party/WebKit/Source/core/layout/api/LayoutItem.h b/third_party/WebKit/Source/core/layout/api/LayoutItem.h
index 6a75923..59f29c5 100644
--- a/third_party/WebKit/Source/core/layout/api/LayoutItem.h
+++ b/third_party/WebKit/Source/core/layout/api/LayoutItem.h
@@ -46,6 +46,11 @@
         return m_layoutObject->isText();
     }
 
+    bool isTextControl() const
+    {
+        return m_layoutObject->isTextControl();
+    }
+
     bool needsLayout()
     {
         return m_layoutObject->needsLayout();
@@ -61,6 +66,11 @@
         return LayoutItem(m_layoutObject->container());
     }
 
+    const ComputedStyle& styleRef() const
+    {
+        return m_layoutObject->styleRef();
+    }
+
     void setMayNeedPaintInvalidation()
     {
         m_layoutObject->setMayNeedPaintInvalidation();
diff --git a/third_party/WebKit/Source/core/layout/api/LayoutTextControlItem.h b/third_party/WebKit/Source/core/layout/api/LayoutTextControlItem.h
new file mode 100644
index 0000000..4de621c
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/api/LayoutTextControlItem.h
@@ -0,0 +1,50 @@
+// 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 LayoutTextControlItem_h
+#define LayoutTextControlItem_h
+
+#include "core/layout/LayoutTextControl.h"
+#include "core/layout/api/LayoutBoxModel.h"
+#include "platform/scroll/ScrollTypes.h"
+
+namespace blink {
+
+class LayoutTextControlItem : public LayoutBoxModel {
+public:
+    explicit LayoutTextControlItem(LayoutTextControl* layoutTextControl)
+        : LayoutBoxModel(layoutTextControl)
+    {
+    }
+
+    explicit LayoutTextControlItem(const LayoutItem& item)
+        : LayoutBoxModel(item)
+    {
+        ASSERT(!item || item.isTextControl());
+    }
+
+    explicit LayoutTextControlItem(std::nullptr_t) : LayoutBoxModel(nullptr) { }
+
+    LayoutTextControlItem() { }
+
+    PassRefPtr<ComputedStyle> createInnerEditorStyle(const ComputedStyle& startStyle) const
+    {
+        return toTextControl()->createInnerEditorStyle(startStyle);
+    }
+
+private:
+    LayoutTextControl* toTextControl()
+    {
+        return toLayoutTextControl(layoutObject());
+    }
+
+    const LayoutTextControl* toTextControl() const
+    {
+        return toLayoutTextControl(layoutObject());
+    }
+};
+
+} // namespace blink
+
+#endif // LayoutTextControlItem_h
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
index b23c717a..0980465 100644
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -187,43 +187,27 @@
             page->chromeClient().didObserveNonGetFetchFromScript();
     }
 
+    // If the fetch request will be handled by the ServiceWorker, the
+    // FetchRequestMode of the request must be FetchRequestModeCORS or
+    // FetchRequestModeCORSWithForcedPreflight. Otherwise the ServiceWorker can
+    // return a opaque response which is from the other origin site and the
+    // script in the page can read the content.
+    //
     // We assume that ServiceWorker is skipped for sync requests and unsupported
     // protocol requests by content/ code.
     if (m_async && !request.skipServiceWorker() && SchemeRegistry::shouldTreatURLSchemeAsAllowingServiceWorkers(request.url().protocol()) && m_document->fetcher()->isControlledByServiceWorker()) {
         ResourceRequest newRequest(request);
-        const WebURLRequest::RequestContext requestContext(request.requestContext());
-        if (requestContext != WebURLRequest::RequestContextFetch) {
-            // When the request context is not "fetch",
-            // |crossOriginRequestPolicy| represents the fetch request mode,
-            // and |credentialsRequested| represents the fetch credentials mode.
-            // So we set those flags here so that we can see the correct request
-            // mode and credentials mode in the service worker's fetch event
-            // handler.
-            switch (m_options.crossOriginRequestPolicy) {
-            case DenyCrossOriginRequests:
-                newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeSameOrigin);
-                break;
-            case UseAccessControl:
-                if (m_options.preflightPolicy == ForcePreflight)
-                    newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeCORSWithForcedPreflight);
-                else
-                    newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeCORS);
-                break;
-            case AllowCrossOriginRequests:
-                // No-CORS requests are allowed only for those contexts.
-                RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(requestContext == WebURLRequest::RequestContextAudio || requestContext == WebURLRequest::RequestContextVideo || requestContext == WebURLRequest::RequestContextObject || requestContext == WebURLRequest::RequestContextFavicon || requestContext == WebURLRequest::RequestContextImage || requestContext == WebURLRequest::RequestContextScript);
-                newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeNoCORS);
-                break;
-            }
-            if (m_resourceLoaderOptions.allowCredentials == AllowStoredCredentials)
-                newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsModeInclude);
-            else
-                newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsModeSameOrigin);
-        }
-        if (newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORS || newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORSWithForcedPreflight) {
-            m_fallbackRequestForServiceWorker = ResourceRequest(request);
-            m_fallbackRequestForServiceWorker.setSkipServiceWorker(true);
-        }
+        // FetchRequestMode should be set by the caller. But the expected value
+        // of FetchRequestMode is not speced yet except for XHR. So we set here.
+        // FIXME: When we support fetch API in document, this value should not
+        // be overridden here.
+        if (m_options.preflightPolicy == ForcePreflight)
+            newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeCORSWithForcedPreflight);
+        else
+            newRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeCORS);
+
+        m_fallbackRequestForServiceWorker = ResourceRequest(request);
+        m_fallbackRequestForServiceWorker.setSkipServiceWorker(true);
 
         loadRequest(newRequest, m_resourceLoaderOptions);
         // |this| may be dead here.
@@ -620,6 +604,10 @@
     }
 
     if (response.wasFetchedViaServiceWorker()) {
+        // It's still possible to reach here with null m_fallbackRequestForServiceWorker
+        // if the request was for main resource loading (i.e. for SharedWorker), for which
+        // we create DocumentLoader before the controller ServiceWorker is set.
+        ASSERT(!m_fallbackRequestForServiceWorker.isNull() || m_requestContext == WebURLRequest::RequestContextSharedWorker);
         if (response.wasFallbackRequiredByServiceWorker()) {
             // At this point we must have m_fallbackRequestForServiceWorker.
             // (For SharedWorker the request won't be CORS or CORS-with-preflight,
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
index 2d6ea3de..ad9eae5a 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -325,6 +325,7 @@
         // Unlike raw <img>, we block mixed content inside of <picture> or <img srcset>.
         ResourceLoaderOptions resourceLoaderOptions = ResourceFetcher::defaultResourceOptions();
         ResourceRequest resourceRequest(url);
+        resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsModeSameOrigin);
         if (updateBehavior == UpdateForcedReload) {
             resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadBypassingCache);
             resourceRequest.setLoFiState(WebURLRequest::LoFiOff);
diff --git a/third_party/WebKit/Source/core/page/EventSource.idl b/third_party/WebKit/Source/core/page/EventSource.idl
index cabfc5c..05abf39 100644
--- a/third_party/WebKit/Source/core/page/EventSource.idl
+++ b/third_party/WebKit/Source/core/page/EventSource.idl
@@ -32,7 +32,7 @@
 // https://html.spec.whatwg.org/multipage/comms.html#the-eventsource-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString url, optional EventSourceInit eventSourceInitDict),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamReader.idl b/third_party/WebKit/Source/core/streams/ReadableStreamReader.idl
index 6603a3f5..b3419cd 100644
--- a/third_party/WebKit/Source/core/streams/ReadableStreamReader.idl
+++ b/third_party/WebKit/Source/core/streams/ReadableStreamReader.idl
@@ -4,7 +4,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Exposed=(Window,Worker),
     NoInterfaceObject,
 ] interface ReadableStreamReader {
diff --git a/third_party/WebKit/Source/core/streams/Stream.idl b/third_party/WebKit/Source/core/streams/Stream.idl
index 875d17f..1d3128f 100644
--- a/third_party/WebKit/Source/core/streams/Stream.idl
+++ b/third_party/WebKit/Source/core/streams/Stream.idl
@@ -38,7 +38,7 @@
 
 [
     RuntimeEnabled=ExperimentalStream,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected
 ] interface Stream {
     readonly attribute DOMString type;
diff --git a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl
index f0ec1b7..0c0486f 100644
--- a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl
+++ b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl
@@ -7,7 +7,7 @@
 // UnderlyingSourceBase, and a JavaScript object can then be generated
 // automatically for use in initializing a ReadableStream.
 
-[NoInterfaceObject, GarbageCollected, ActiveDOMObject]
+[NoInterfaceObject, GarbageCollected, DependentLifetime]
 interface UnderlyingSourceBase {
     [CallWith=ScriptState, ImplementedAs=startWrapper] Promise<void> start(any stream);
     [CallWith=ScriptState] Promise<void> pull();
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
index d07ffa3..155dc200 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -146,14 +146,11 @@
 
 Document* SVGUseElement::externalDocument() const
 {
-    if (m_resource && m_resource->isLoaded()) {
-        // Gracefully handle error condition.
-        if (m_resource->errorOccurred())
-            return nullptr;
-        ASSERT(m_resource->document());
-        return m_resource->document();
-    }
-    return nullptr;
+    // Gracefully handle error condition.
+    if (!resourceIsValid())
+        return nullptr;
+    ASSERT(m_resource->document());
+    return m_resource->document();
 }
 
 void transferUseWidthAndHeightIfNeeded(const SVGUseElement& use, SVGElement* shadowElement, const SVGElement& originalElement)
@@ -789,11 +786,12 @@
 
 void SVGUseElement::notifyFinished(Resource* resource)
 {
+    ASSERT(m_resource == resource);
     if (!inDocument())
         return;
 
     invalidateShadowTree();
-    if (resource->errorOccurred()) {
+    if (!resourceIsValid()) {
         dispatchEvent(Event::create(EventTypeNames::error));
     } else if (!resource->wasCanceled()) {
         if (m_haveFiredLoadEvent)
@@ -811,6 +809,14 @@
     return m_resource && m_resource->isLoading();
 }
 
+bool SVGUseElement::resourceIsValid() const
+{
+    return m_resource
+        && m_resource->isLoaded()
+        && !m_resource->errorOccurred()
+        && m_resource->document();
+}
+
 bool SVGUseElement::instanceTreeIsLoading(const SVGElement* targetInstance)
 {
     for (const SVGElement* element = targetInstance; element; element = Traversal<SVGElement>::next(*element, targetInstance)) {
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.h b/third_party/WebKit/Source/core/svg/SVGUseElement.h
index 0dacc19..874c44a 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.h
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.h
@@ -102,6 +102,7 @@
     void invalidateDependentShadowTrees();
 
     bool resourceIsStillLoading() const;
+    bool resourceIsValid() const;
     Document* externalDocument() const;
     bool instanceTreeIsLoading(const SVGElement*);
     void notifyFinished(Resource*) override;
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp
index 61c65d97..071c4ec 100644
--- a/third_party/WebKit/Source/core/testing/Internals.cpp
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -2548,8 +2548,8 @@
 void Internals::setMediaElementNetworkState(HTMLMediaElement* mediaElement, int state)
 {
     ASSERT(mediaElement);
-    ASSERT(state >= HTMLMediaElement::NetworkState::NETWORK_EMPTY);
-    ASSERT(state <= HTMLMediaElement::NetworkState::NETWORK_NO_SOURCE);
+    ASSERT(state >= WebMediaPlayer::NetworkState::NetworkStateEmpty);
+    ASSERT(state <= WebMediaPlayer::NetworkState::NetworkStateDecodeError);
     mediaElement->setNetworkState(static_cast<WebMediaPlayer::NetworkState>(state));
 }
 
diff --git a/third_party/WebKit/Source/core/workers/SharedWorker.idl b/third_party/WebKit/Source/core/workers/SharedWorker.idl
index babc7ba..3cb45e7e 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorker.idl
+++ b/third_party/WebKit/Source/core/workers/SharedWorker.idl
@@ -32,7 +32,7 @@
 // https://html.spec.whatwg.org/#shared-workers-and-the-sharedworker-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     // TODO(philipj): The name argument should not have a default null value.
     Constructor(DOMString scriptURL, optional DOMString name = null),
     ConstructorCallWith=ExecutionContext,
diff --git a/third_party/WebKit/Source/core/workers/Worker.idl b/third_party/WebKit/Source/core/workers/Worker.idl
index c1b4a8ec..70e5235d 100644
--- a/third_party/WebKit/Source/core/workers/Worker.idl
+++ b/third_party/WebKit/Source/core/workers/Worker.idl
@@ -28,7 +28,7 @@
 // https://html.spec.whatwg.org/#dedicated-workers-and-the-worker-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString scriptUrl),
     ConstructorCallWith=ExecutionContext,
     GarbageCollected,
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.idl b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.idl
index ac3b743..28d9452 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.idl
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.idl
@@ -41,7 +41,7 @@
 // TODO(philipj): Most DOMString types in the XMLHttpRequest interface should be
 // either ByteString or USVString.
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ScriptState,
     Exposed=(Window,DedicatedWorker,SharedWorker)
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
index 896d72de..8a414ac 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
@@ -4,28 +4,10 @@
 
 #include "modules/battery/BatteryDispatcher.h"
 
-#include "modules/battery/BatteryStatus.h"
-#include "public/platform/Platform.h"
+#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
-namespace {
-
-double ensureTwoSignificantDigits(double level)
-{
-    // Convert battery level value which should be in [0, 1] to a value in [0, 1]
-    // with 2 digits of precision. This is to provide a consistent experience
-    // across platforms (e.g. on Mac and Android the battery changes are generally
-    // reported with 1% granularity). It also serves the purpose of reducing the
-    // possibility of fingerprinting and triggers less level change events on
-    // platforms where the granularity is high.
-    ASSERT(level >= 0 && level <= 1);
-    return round(level * 100) / 100.f;
-}
-
-} // namespace
-
-
 BatteryDispatcher& BatteryDispatcher::instance()
 {
     DEFINE_STATIC_LOCAL(Persistent<BatteryDispatcher>, batteryDispatcher, (new BatteryDispatcher()));
@@ -33,6 +15,8 @@
 }
 
 BatteryDispatcher::BatteryDispatcher()
+    : m_hasLatestData(false)
+    , m_batteryDispatcherProxy(adoptPtr(new BatteryDispatcherProxy(this)))
 {
 }
 
@@ -40,34 +24,22 @@
 {
 }
 
-DEFINE_TRACE(BatteryDispatcher)
+void BatteryDispatcher::OnUpdateBatteryStatus(const BatteryStatus& batteryStatus)
 {
-    visitor->trace(m_batteryStatus);
-    PlatformEventDispatcher::trace(visitor);
-}
-
-void BatteryDispatcher::updateBatteryStatus(const WebBatteryStatus& batteryStatus)
-{
-    m_batteryStatus = BatteryStatus::create(
-        batteryStatus.charging, batteryStatus.chargingTime, batteryStatus.dischargingTime,
-        ensureTwoSignificantDigits(batteryStatus.level));
+    m_batteryStatus = batteryStatus;
+    m_hasLatestData = true;
     notifyControllers();
 }
 
-BatteryStatus* BatteryDispatcher::latestData()
-{
-    return m_batteryStatus.get();
-}
-
 void BatteryDispatcher::startListening()
 {
-    Platform::current()->startListening(WebPlatformEventTypeBattery, this);
+    m_batteryDispatcherProxy->StartListening();
 }
 
 void BatteryDispatcher::stopListening()
 {
-    Platform::current()->stopListening(WebPlatformEventTypeBattery);
-    m_batteryStatus.clear();
+    m_batteryDispatcherProxy->StopListening();
+    m_hasLatestData = false;
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
index 40c3fcf..cd99dec 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
@@ -6,26 +6,26 @@
 #define BatteryDispatcher_h
 
 #include "core/frame/PlatformEventDispatcher.h"
+#include "modules/ModulesExport.h"
 #include "modules/battery/BatteryManager.h"
-#include "modules/battery/BatteryStatus.h"
-#include "public/platform/WebBatteryStatusListener.h"
+#include "platform/battery/battery_dispatcher_proxy.h"
+#include "wtf/OwnPtr.h"
 
 namespace blink {
 
-class WebBatteryStatus;
-
-class BatteryDispatcher final : public GarbageCollectedFinalized<BatteryDispatcher>, public PlatformEventDispatcher, public WebBatteryStatusListener {
+class MODULES_EXPORT BatteryDispatcher final : public GarbageCollectedFinalized<BatteryDispatcher>, public PlatformEventDispatcher, public BatteryDispatcherProxy::Listener {
     USING_GARBAGE_COLLECTED_MIXIN(BatteryDispatcher);
 public:
     static BatteryDispatcher& instance();
     ~BatteryDispatcher() override;
 
-    BatteryStatus* latestData();
+    const BatteryStatus* latestData() const
+    {
+        return m_hasLatestData ? &m_batteryStatus : nullptr;
+    }
 
-    // Inherited from WebBatteryStatusListener.
-    void updateBatteryStatus(const WebBatteryStatus&) override;
-
-    DECLARE_VIRTUAL_TRACE();
+    // Inherited from BatteryDispatcherProxy::Listener.
+    void OnUpdateBatteryStatus(const BatteryStatus&) override;
 
 private:
     BatteryDispatcher();
@@ -34,7 +34,9 @@
     void startListening() override;
     void stopListening() override;
 
-    Member<BatteryStatus> m_batteryStatus;
+    BatteryStatus m_batteryStatus;
+    bool m_hasLatestData;
+    OwnPtr<BatteryDispatcherProxy> m_batteryDispatcherProxy;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/battery/BatteryManager.cpp b/third_party/WebKit/Source/modules/battery/BatteryManager.cpp
index f7b280b..3a8a4f0c 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryManager.cpp
+++ b/third_party/WebKit/Source/modules/battery/BatteryManager.cpp
@@ -7,7 +7,6 @@
 #include "core/dom/Document.h"
 #include "core/events/Event.h"
 #include "modules/battery/BatteryDispatcher.h"
-#include "modules/battery/BatteryStatus.h"
 
 namespace blink {
 
@@ -28,7 +27,6 @@
 BatteryManager::BatteryManager(ExecutionContext* context)
     : ActiveDOMObject(context)
     , PlatformEventController(toDocument(context)->page())
-    , m_batteryStatus(BatteryStatus::create())
 {
 }
 
@@ -51,30 +49,30 @@
 
 bool BatteryManager::charging()
 {
-    return m_batteryStatus->charging();
+    return m_batteryStatus.charging();
 }
 
 double BatteryManager::chargingTime()
 {
-    return m_batteryStatus->chargingTime();
+    return m_batteryStatus.charging_time();
 }
 
 double BatteryManager::dischargingTime()
 {
-    return m_batteryStatus->dischargingTime();
+    return m_batteryStatus.discharging_time();
 }
 
 double BatteryManager::level()
 {
-    return m_batteryStatus->level();
+    return m_batteryStatus.level();
 }
 
 void BatteryManager::didUpdateData()
 {
     ASSERT(m_batteryProperty);
 
-    BatteryStatus* oldStatus = m_batteryStatus;
-    m_batteryStatus = BatteryDispatcher::instance().latestData();
+    BatteryStatus oldStatus = m_batteryStatus;
+    m_batteryStatus = *BatteryDispatcher::instance().latestData();
 
     if (m_batteryProperty->state() == ScriptPromisePropertyBase::Pending) {
         m_batteryProperty->resolve(this);
@@ -86,15 +84,13 @@
     if (document->activeDOMObjectsAreSuspended() || document->activeDOMObjectsAreStopped())
         return;
 
-    ASSERT(oldStatus);
-
-    if (m_batteryStatus->charging() != oldStatus->charging())
+    if (m_batteryStatus.charging() != oldStatus.charging())
         dispatchEvent(Event::create(EventTypeNames::chargingchange));
-    if (m_batteryStatus->chargingTime() != oldStatus->chargingTime())
+    if (m_batteryStatus.charging_time() != oldStatus.charging_time())
         dispatchEvent(Event::create(EventTypeNames::chargingtimechange));
-    if (m_batteryStatus->dischargingTime() != oldStatus->dischargingTime())
+    if (m_batteryStatus.discharging_time() != oldStatus.discharging_time())
         dispatchEvent(Event::create(EventTypeNames::dischargingtimechange));
-    if (m_batteryStatus->level() != oldStatus->level())
+    if (m_batteryStatus.level() != oldStatus.level())
         dispatchEvent(Event::create(EventTypeNames::levelchange));
 }
 
@@ -142,7 +138,6 @@
 DEFINE_TRACE(BatteryManager)
 {
     visitor->trace(m_batteryProperty);
-    visitor->trace(m_batteryStatus);
     PlatformEventController::trace(visitor);
     RefCountedGarbageCollectedEventTargetWithInlineData<BatteryManager>::trace(visitor);
     ActiveDOMObject::trace(visitor);
diff --git a/third_party/WebKit/Source/modules/battery/BatteryManager.h b/third_party/WebKit/Source/modules/battery/BatteryManager.h
index 8c421a3f..114273c7 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryManager.h
+++ b/third_party/WebKit/Source/modules/battery/BatteryManager.h
@@ -11,12 +11,11 @@
 #include "core/dom/ContextLifecycleObserver.h"
 #include "core/frame/PlatformEventController.h"
 #include "modules/EventTargetModules.h"
+#include "platform/battery/battery_status.h"
 #include "platform/heap/Handle.h"
 
 namespace blink {
 
-class BatteryStatus;
-
 class BatteryManager final : public RefCountedGarbageCollectedEventTargetWithInlineData<BatteryManager>, public ActiveDOMObject, public PlatformEventController {
     REFCOUNTED_GARBAGE_COLLECTED_EVENT_TARGET(BatteryManager);
     DEFINE_WRAPPERTYPEINFO();
@@ -61,7 +60,7 @@
 
     using BatteryProperty = ScriptPromiseProperty<Member<BatteryManager>, Member<BatteryManager>, Member<DOMException>>;
     Member<BatteryProperty> m_batteryProperty;
-    Member<BatteryStatus> m_batteryStatus;
+    BatteryStatus m_batteryStatus;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/battery/BatteryManager.idl b/third_party/WebKit/Source/modules/battery/BatteryManager.idl
index 1237a51e..26eebff 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryManager.idl
+++ b/third_party/WebKit/Source/modules/battery/BatteryManager.idl
@@ -4,7 +4,7 @@
 
 // https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html#batterymanager-interface
 [
-    ActiveDOMObject
+    DependentLifetime
 ] interface BatteryManager : EventTarget {
     readonly attribute boolean charging;
     readonly attribute unrestricted double chargingTime;
diff --git a/third_party/WebKit/Source/modules/battery/BatteryStatus.cpp b/third_party/WebKit/Source/modules/battery/BatteryStatus.cpp
deleted file mode 100644
index fcac847..0000000
--- a/third_party/WebKit/Source/modules/battery/BatteryStatus.cpp
+++ /dev/null
@@ -1,37 +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.
-
-#include "modules/battery/BatteryStatus.h"
-
-#include <limits>
-
-namespace blink {
-
-BatteryStatus* BatteryStatus::create()
-{
-    return new BatteryStatus;
-}
-
-BatteryStatus* BatteryStatus::create(bool charging, double chargingTime, double dischargingTime, double level)
-{
-    return new BatteryStatus(charging, chargingTime, dischargingTime, level);
-}
-
-BatteryStatus::BatteryStatus()
-    : m_charging(true)
-    , m_chargingTime(0)
-    , m_dischargingTime(std::numeric_limits<double>::infinity())
-    , m_level(1)
-{
-}
-
-BatteryStatus::BatteryStatus(bool charging, double chargingTime, double dischargingTime, double level)
-    : m_charging(charging)
-    , m_chargingTime(chargingTime)
-    , m_dischargingTime(dischargingTime)
-    , m_level(level)
-{
-}
-
-} // namespace blink
diff --git a/third_party/WebKit/Source/modules/battery/BatteryStatus.h b/third_party/WebKit/Source/modules/battery/BatteryStatus.h
deleted file mode 100644
index 89c09b2..0000000
--- a/third_party/WebKit/Source/modules/battery/BatteryStatus.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 BatteryStatus_h
-#define BatteryStatus_h
-
-#include "platform/heap/Handle.h"
-#include "wtf/Forward.h"
-#include "wtf/RefCounted.h"
-
-namespace blink {
-
-class BatteryStatus final : public GarbageCollected<BatteryStatus> {
-public:
-    static BatteryStatus* create();
-    static BatteryStatus* create(bool charging, double chargingTime, double dischargingTime, double level);
-
-    bool charging() const { return m_charging; }
-    double chargingTime() const  { return m_chargingTime; }
-    double dischargingTime() const  { return m_dischargingTime; }
-    double level() const  { return m_level; }
-
-    DEFINE_INLINE_TRACE() { }
-
-private:
-    BatteryStatus();
-    BatteryStatus(bool charging, double chargingTime, double dischargingTime, double level);
-
-    bool m_charging;
-    double m_chargingTime;
-    double m_dischargingTime;
-    double m_level;
-};
-
-} // namespace blink
-
-#endif // BatteryStatus_h
diff --git a/third_party/WebKit/Source/modules/battery/DEPS b/third_party/WebKit/Source/modules/battery/DEPS
index eb5f33d7..31d71c3 100644
--- a/third_party/WebKit/Source/modules/battery/DEPS
+++ b/third_party/WebKit/Source/modules/battery/DEPS
@@ -4,6 +4,7 @@
     "+heap",
     "-modules",
     "+modules/EventTargetModules.h",
+    "+modules/ModulesExport.h",
     "+modules/battery",
     "+platform",
     "+public/platform",
diff --git a/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.cpp b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.cpp
new file mode 100644
index 0000000..13ad6ce
--- /dev/null
+++ b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.cpp
@@ -0,0 +1,17 @@
+// 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 "modules/battery/testing/InternalsBattery.h"
+
+#include "modules/battery/BatteryDispatcher.h"
+
+namespace blink {
+
+void InternalsBattery::updateBatteryStatus(Internals&, bool charging, double chargingTime, double dischargingTime, double level)
+{
+    BatteryDispatcher::instance().OnUpdateBatteryStatus(
+        BatteryStatus(charging, chargingTime, dischargingTime, level));
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.h b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.h
new file mode 100644
index 0000000..b4298640
--- /dev/null
+++ b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.h
@@ -0,0 +1,25 @@
+// 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 InternalsBattery_h
+#define InternalsBattery_h
+
+#include "wtf/Allocator.h"
+
+namespace blink {
+
+class Internals;
+
+// TODO(yukishiino): Remove this API once JS bindings of Mojo services get
+// available.
+class InternalsBattery {
+    STATIC_ONLY(InternalsBattery);
+
+public:
+    static void updateBatteryStatus(Internals&, bool charging, double chargingTime, double dischargingTime, double level);
+};
+
+} // namespace blink
+
+#endif // InternalsBattery_h
diff --git a/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.idl b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.idl
new file mode 100644
index 0000000..69256c9
--- /dev/null
+++ b/third_party/WebKit/Source/modules/battery/testing/InternalsBattery.idl
@@ -0,0 +1,9 @@
+// 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.
+
+// TODO(yukishiino): Remove this API once JS bindings of Mojo services get
+// available.
+partial interface Internals {
+    void updateBatteryStatus(boolean charging, float chargingTime, float dischargingTime, float level);
+};
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
index 2bb26ce8..3a10f7c 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
@@ -13,7 +13,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=WebBluetooth,
     OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothDevice : EventTarget
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
index dad100f..7f3d77c 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
@@ -8,7 +8,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=WebBluetooth,
     OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothRemoteGATTCharacteristic : EventTarget {//: CharacteristicEventHandlers {
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
new file mode 100644
index 0000000..7072ec0
--- /dev/null
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
@@ -0,0 +1,1366 @@
+// 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 "modules/canvas2d/BaseRenderingContext2D.h"
+
+#include "bindings/core/v8/ExceptionMessages.h"
+#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/ExceptionStatePlaceholder.h"
+#include "core/css/parser/CSSParser.h"
+#include "core/frame/ImageBitmap.h"
+#include "core/html/HTMLCanvasElement.h"
+#include "core/html/HTMLImageElement.h"
+#include "core/html/HTMLVideoElement.h"
+#include "core/html/ImageData.h"
+#include "modules/canvas2d/CanvasGradient.h"
+#include "modules/canvas2d/CanvasPattern.h"
+#include "modules/canvas2d/CanvasStyle.h"
+#include "modules/canvas2d/Path2D.h"
+#include "platform/geometry/FloatQuad.h"
+#include "platform/graphics/Color.h"
+#include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
+#include "platform/graphics/Image.h"
+#include "platform/graphics/ImageBuffer.h"
+#include "platform/graphics/StrokeData.h"
+#include "platform/graphics/skia/SkiaUtils.h"
+#include "third_party/skia/include/core/SkImageFilter.h"
+
+namespace blink {
+
+BaseRenderingContext2D::BaseRenderingContext2D()
+    : m_clipAntialiasing(NotAntiAliased)
+{
+    m_stateStack.append(CanvasRenderingContext2DState::create());
+}
+
+BaseRenderingContext2D::~BaseRenderingContext2D()
+{
+}
+
+CanvasRenderingContext2DState& BaseRenderingContext2D::modifiableState()
+{
+    realizeSaves();
+    return *m_stateStack.last();
+}
+
+void BaseRenderingContext2D::realizeSaves()
+{
+    validateStateStack();
+    if (state().hasUnrealizedSaves()) {
+        ASSERT(m_stateStack.size() >= 1);
+        // Reduce the current state's unrealized count by one now,
+        // to reflect the fact we are saving one state.
+        m_stateStack.last()->restore();
+        m_stateStack.append(CanvasRenderingContext2DState::create(state(), CanvasRenderingContext2DState::DontCopyClipList));
+        // Set the new state's unrealized count to 0, because it has no outstanding saves.
+        // We need to do this explicitly because the copy constructor and operator= used
+        // by the Vector operations copy the unrealized count from the previous state (in
+        // turn necessary to support correct resizing and unwinding of the stack).
+        m_stateStack.last()->resetUnrealizedSaveCount();
+        SkCanvas* canvas = drawingCanvas();
+        if (canvas)
+            canvas->save();
+        validateStateStack();
+    }
+}
+
+void BaseRenderingContext2D::save()
+{
+    m_stateStack.last()->save();
+}
+
+void BaseRenderingContext2D::restore()
+{
+    validateStateStack();
+    if (state().hasUnrealizedSaves()) {
+        // We never realized the save, so just record that it was unnecessary.
+        m_stateStack.last()->restore();
+        return;
+    }
+    ASSERT(m_stateStack.size() >= 1);
+    if (m_stateStack.size() <= 1)
+        return;
+    m_path.transform(state().transform());
+    m_stateStack.removeLast();
+    m_stateStack.last()->clearResolvedFilter();
+    m_path.transform(state().transform().inverse());
+    SkCanvas* c = drawingCanvas();
+    if (c)
+        c->restore();
+
+    validateStateStack();
+}
+
+static inline void convertCanvasStyleToUnionType(CanvasStyle* style, StringOrCanvasGradientOrCanvasPattern& returnValue)
+{
+    if (CanvasGradient* gradient = style->canvasGradient()) {
+        returnValue.setCanvasGradient(gradient);
+        return;
+    }
+    if (CanvasPattern* pattern = style->canvasPattern()) {
+        returnValue.setCanvasPattern(pattern);
+        return;
+    }
+    returnValue.setString(style->color());
+}
+
+void BaseRenderingContext2D::strokeStyle(StringOrCanvasGradientOrCanvasPattern& returnValue) const
+{
+    convertCanvasStyleToUnionType(state().strokeStyle(), returnValue);
+}
+
+void BaseRenderingContext2D::setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern& style)
+{
+    ASSERT(!style.isNull());
+
+    String colorString;
+    CanvasStyle* canvasStyle = nullptr;
+    if (style.isString()) {
+        colorString = style.getAsString();
+        if (colorString == state().unparsedStrokeColor())
+            return;
+        Color parsedColor = 0;
+        if (!parseColorOrCurrentColor(parsedColor, colorString))
+            return;
+        if (state().strokeStyle()->isEquivalentRGBA(parsedColor.rgb())) {
+            modifiableState().setUnparsedStrokeColor(colorString);
+            return;
+        }
+        canvasStyle = CanvasStyle::createFromRGBA(parsedColor.rgb());
+    } else if (style.isCanvasGradient()) {
+        canvasStyle = CanvasStyle::createFromGradient(style.getAsCanvasGradient());
+    } else if (style.isCanvasPattern()) {
+        CanvasPattern* canvasPattern = style.getAsCanvasPattern();
+
+        if (originClean() && !canvasPattern->originClean())
+            setOriginTainted();
+
+        canvasStyle = CanvasStyle::createFromPattern(canvasPattern);
+    }
+
+    ASSERT(canvasStyle);
+
+    modifiableState().setStrokeStyle(canvasStyle);
+    modifiableState().setUnparsedStrokeColor(colorString);
+    modifiableState().clearResolvedFilter();
+}
+
+void BaseRenderingContext2D::fillStyle(StringOrCanvasGradientOrCanvasPattern& returnValue) const
+{
+    convertCanvasStyleToUnionType(state().fillStyle(), returnValue);
+}
+
+void BaseRenderingContext2D::setFillStyle(const StringOrCanvasGradientOrCanvasPattern& style)
+{
+    ASSERT(!style.isNull());
+    validateStateStack();
+    String colorString;
+    CanvasStyle* canvasStyle = nullptr;
+    if (style.isString()) {
+        colorString = style.getAsString();
+        if (colorString == state().unparsedFillColor())
+            return;
+        Color parsedColor = 0;
+        if (!parseColorOrCurrentColor(parsedColor, colorString))
+            return;
+        if (state().fillStyle()->isEquivalentRGBA(parsedColor.rgb())) {
+            modifiableState().setUnparsedFillColor(colorString);
+            return;
+        }
+        canvasStyle = CanvasStyle::createFromRGBA(parsedColor.rgb());
+    } else if (style.isCanvasGradient()) {
+        canvasStyle = CanvasStyle::createFromGradient(style.getAsCanvasGradient());
+    } else if (style.isCanvasPattern()) {
+        CanvasPattern* canvasPattern = style.getAsCanvasPattern();
+
+        if (originClean() && !canvasPattern->originClean())
+            setOriginTainted();
+        if (canvasPattern->pattern()->isTextureBacked())
+            disableDeferral(DisableDeferralReasonUsingTextureBackedPattern);
+        canvasStyle = CanvasStyle::createFromPattern(canvasPattern);
+    }
+
+    ASSERT(canvasStyle);
+    modifiableState().setFillStyle(canvasStyle);
+    modifiableState().setUnparsedFillColor(colorString);
+    modifiableState().clearResolvedFilter();
+}
+
+double BaseRenderingContext2D::lineWidth() const
+{
+    return state().lineWidth();
+}
+
+void BaseRenderingContext2D::setLineWidth(double width)
+{
+    if (!std::isfinite(width) || width <= 0)
+        return;
+    if (state().lineWidth() == width)
+        return;
+    modifiableState().setLineWidth(width);
+}
+
+String BaseRenderingContext2D::lineCap() const
+{
+    return lineCapName(state().lineCap());
+}
+
+void BaseRenderingContext2D::setLineCap(const String& s)
+{
+    LineCap cap;
+    if (!parseLineCap(s, cap))
+        return;
+    if (state().lineCap() == cap)
+        return;
+    modifiableState().setLineCap(cap);
+}
+
+String BaseRenderingContext2D::lineJoin() const
+{
+    return lineJoinName(state().lineJoin());
+}
+
+void BaseRenderingContext2D::setLineJoin(const String& s)
+{
+    LineJoin join;
+    if (!parseLineJoin(s, join))
+        return;
+    if (state().lineJoin() == join)
+        return;
+    modifiableState().setLineJoin(join);
+}
+
+double BaseRenderingContext2D::miterLimit() const
+{
+    return state().miterLimit();
+}
+
+void BaseRenderingContext2D::setMiterLimit(double limit)
+{
+    if (!std::isfinite(limit) || limit <= 0)
+        return;
+    if (state().miterLimit() == limit)
+        return;
+    modifiableState().setMiterLimit(limit);
+}
+
+double BaseRenderingContext2D::shadowOffsetX() const
+{
+    return state().shadowOffset().width();
+}
+
+void BaseRenderingContext2D::setShadowOffsetX(double x)
+{
+    if (!std::isfinite(x))
+        return;
+    if (state().shadowOffset().width() == x)
+        return;
+    modifiableState().setShadowOffsetX(x);
+}
+
+double BaseRenderingContext2D::shadowOffsetY() const
+{
+    return state().shadowOffset().height();
+}
+
+void BaseRenderingContext2D::setShadowOffsetY(double y)
+{
+    if (!std::isfinite(y))
+        return;
+    if (state().shadowOffset().height() == y)
+        return;
+    modifiableState().setShadowOffsetY(y);
+}
+
+double BaseRenderingContext2D::shadowBlur() const
+{
+    return state().shadowBlur();
+}
+
+void BaseRenderingContext2D::setShadowBlur(double blur)
+{
+    if (!std::isfinite(blur) || blur < 0)
+        return;
+    if (state().shadowBlur() == blur)
+        return;
+    modifiableState().setShadowBlur(blur);
+}
+
+String BaseRenderingContext2D::shadowColor() const
+{
+    return Color(state().shadowColor()).serialized();
+}
+
+void BaseRenderingContext2D::setShadowColor(const String& colorString)
+{
+    Color color;
+    if (!parseColorOrCurrentColor(color, colorString))
+        return;
+    if (state().shadowColor() == color)
+        return;
+    modifiableState().setShadowColor(color.rgb());
+}
+
+const Vector<double>& BaseRenderingContext2D::getLineDash() const
+{
+    return state().lineDash();
+}
+
+static bool lineDashSequenceIsValid(const Vector<double>& dash)
+{
+    for (size_t i = 0; i < dash.size(); i++) {
+        if (!std::isfinite(dash[i]) || dash[i] < 0)
+            return false;
+    }
+    return true;
+}
+
+void BaseRenderingContext2D::setLineDash(const Vector<double>& dash)
+{
+    if (!lineDashSequenceIsValid(dash))
+        return;
+    modifiableState().setLineDash(dash);
+}
+
+double BaseRenderingContext2D::lineDashOffset() const
+{
+    return state().lineDashOffset();
+}
+
+void BaseRenderingContext2D::setLineDashOffset(double offset)
+{
+    if (!std::isfinite(offset) || state().lineDashOffset() == offset)
+        return;
+    modifiableState().setLineDashOffset(offset);
+}
+
+double BaseRenderingContext2D::globalAlpha() const
+{
+    return state().globalAlpha();
+}
+
+void BaseRenderingContext2D::setGlobalAlpha(double alpha)
+{
+    if (!(alpha >= 0 && alpha <= 1))
+        return;
+    if (state().globalAlpha() == alpha)
+        return;
+    modifiableState().setGlobalAlpha(alpha);
+}
+
+String BaseRenderingContext2D::globalCompositeOperation() const
+{
+    return compositeOperatorName(compositeOperatorFromSkia(state().globalComposite()), blendModeFromSkia(state().globalComposite()));
+}
+
+void BaseRenderingContext2D::setGlobalCompositeOperation(const String& operation)
+{
+    CompositeOperator op = CompositeSourceOver;
+    WebBlendMode blendMode = WebBlendModeNormal;
+    if (!parseCompositeAndBlendOperator(operation, op, blendMode))
+        return;
+    SkXfermode::Mode xfermode = WebCoreCompositeToSkiaComposite(op, blendMode);
+    if (state().globalComposite() == xfermode)
+        return;
+    modifiableState().setGlobalComposite(xfermode);
+}
+
+String BaseRenderingContext2D::filter() const
+{
+    return state().unparsedFilter();
+}
+
+void BaseRenderingContext2D::setFilter(const String& filterString)
+{
+    if (filterString == state().unparsedFilter())
+        return;
+
+    RefPtrWillBeRawPtr<CSSValue> filterValue = CSSParser::parseSingleValue(CSSPropertyWebkitFilter, filterString, CSSParserContext(HTMLStandardMode, 0));
+
+    if (!filterValue || filterValue->isInitialValue() || filterValue->isInheritedValue())
+        return;
+
+    modifiableState().setUnparsedFilter(filterString);
+    modifiableState().setFilter(filterValue.release());
+}
+
+PassRefPtrWillBeRawPtr<SVGMatrixTearOff> BaseRenderingContext2D::currentTransform() const
+{
+    return SVGMatrixTearOff::create(state().transform());
+}
+
+void BaseRenderingContext2D::setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff> passMatrixTearOff)
+{
+    RefPtrWillBeRawPtr<SVGMatrixTearOff> matrixTearOff = passMatrixTearOff;
+    const AffineTransform& transform = matrixTearOff->value();
+    setTransform(transform.a(), transform.b(), transform.c(), transform.d(), transform.e(), transform.f());
+}
+
+void BaseRenderingContext2D::scale(double sx, double sy)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+
+    if (!std::isfinite(sx) || !std::isfinite(sy))
+        return;
+
+    AffineTransform newTransform = state().transform();
+    newTransform.scaleNonUniform(sx, sy);
+    if (state().transform() == newTransform)
+        return;
+
+    modifiableState().setTransform(newTransform);
+    if (!state().isTransformInvertible())
+        return;
+
+    c->scale(sx, sy);
+    m_path.transform(AffineTransform().scaleNonUniform(1.0 / sx, 1.0 / sy));
+}
+
+void BaseRenderingContext2D::rotate(double angleInRadians)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+
+    if (!std::isfinite(angleInRadians))
+        return;
+
+    AffineTransform newTransform = state().transform();
+    newTransform.rotateRadians(angleInRadians);
+    if (state().transform() == newTransform)
+        return;
+
+    modifiableState().setTransform(newTransform);
+    if (!state().isTransformInvertible())
+        return;
+    c->rotate(angleInRadians * (180.0 / piFloat));
+    m_path.transform(AffineTransform().rotateRadians(-angleInRadians));
+}
+
+void BaseRenderingContext2D::translate(double tx, double ty)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+    if (!state().isTransformInvertible())
+        return;
+
+    if (!std::isfinite(tx) || !std::isfinite(ty))
+        return;
+
+    AffineTransform newTransform = state().transform();
+    newTransform.translate(tx, ty);
+    if (state().transform() == newTransform)
+        return;
+
+    modifiableState().setTransform(newTransform);
+    if (!state().isTransformInvertible())
+        return;
+    c->translate(tx, ty);
+    m_path.transform(AffineTransform().translate(-tx, -ty));
+}
+
+void BaseRenderingContext2D::transform(double m11, double m12, double m21, double m22, double dx, double dy)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+
+    if (!std::isfinite(m11) || !std::isfinite(m21) || !std::isfinite(dx) || !std::isfinite(m12) || !std::isfinite(m22) || !std::isfinite(dy))
+        return;
+
+    AffineTransform transform(m11, m12, m21, m22, dx, dy);
+    AffineTransform newTransform = state().transform() * transform;
+    if (state().transform() == newTransform)
+        return;
+
+    modifiableState().setTransform(newTransform);
+    if (!state().isTransformInvertible())
+        return;
+
+    c->concat(affineTransformToSkMatrix(transform));
+    m_path.transform(transform.inverse());
+}
+
+void BaseRenderingContext2D::resetTransform()
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+
+    AffineTransform ctm = state().transform();
+    bool invertibleCTM = state().isTransformInvertible();
+    // It is possible that CTM is identity while CTM is not invertible.
+    // When CTM becomes non-invertible, realizeSaves() can make CTM identity.
+    if (ctm.isIdentity() && invertibleCTM)
+        return;
+
+    // resetTransform() resolves the non-invertible CTM state.
+    modifiableState().resetTransform();
+    c->setMatrix(affineTransformToSkMatrix(baseTransform()));
+
+    if (invertibleCTM)
+        m_path.transform(ctm);
+    // When else, do nothing because all transform methods didn't update m_path when CTM became non-invertible.
+    // It means that resetTransform() restores m_path just before CTM became non-invertible.
+}
+
+void BaseRenderingContext2D::setTransform(double m11, double m12, double m21, double m22, double dx, double dy)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+
+    if (!std::isfinite(m11) || !std::isfinite(m21) || !std::isfinite(dx) || !std::isfinite(m12) || !std::isfinite(m22) || !std::isfinite(dy))
+        return;
+
+    resetTransform();
+    transform(m11, m12, m21, m22, dx, dy);
+}
+
+void BaseRenderingContext2D::beginPath()
+{
+    m_path.clear();
+}
+
+static bool validateRectForCanvas(double& x, double& y, double& width, double& height)
+{
+    if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(width) || !std::isfinite(height))
+        return false;
+
+    if (!width && !height)
+        return false;
+
+    if (width < 0) {
+        width = -width;
+        x -= width;
+    }
+
+    if (height < 0) {
+        height = -height;
+        y -= height;
+    }
+
+    return true;
+}
+
+bool BaseRenderingContext2D::isFullCanvasCompositeMode(SkXfermode::Mode op)
+{
+    // See 4.8.11.1.3 Compositing
+    // CompositeSourceAtop and CompositeDestinationOut are not listed here as the platforms already
+    // implement the specification's behavior.
+    return op == SkXfermode::kSrcIn_Mode || op == SkXfermode::kSrcOut_Mode || op == SkXfermode::kDstIn_Mode || op == SkXfermode::kDstATop_Mode;
+}
+
+static bool isPathExpensive(const Path& path)
+{
+    const SkPath& skPath = path.skPath();
+    if (ExpensiveCanvasHeuristicParameters::ConcavePathsAreExpensive && !skPath.isConvex())
+        return true;
+
+    if (skPath.countPoints() > ExpensiveCanvasHeuristicParameters::ExpensivePathPointCount)
+        return true;
+
+    return false;
+}
+
+void BaseRenderingContext2D::drawPathInternal(const Path& path, CanvasRenderingContext2DState::PaintType paintType, SkPath::FillType fillType)
+{
+    if (path.isEmpty())
+        return;
+
+    SkPath skPath = path.skPath();
+    FloatRect bounds = path.boundingRect();
+    skPath.setFillType(fillType);
+
+    if (paintType == CanvasRenderingContext2DState::StrokePaintType)
+        inflateStrokeRect(bounds);
+
+    if (!drawingCanvas())
+        return;
+
+    if (draw(
+        [&skPath, this](SkCanvas* c, const SkPaint* paint) // draw lambda
+        {
+            c->drawPath(skPath, *paint);
+        },
+        [](const SkIRect& rect) // overdraw test lambda
+        {
+            return false;
+        }, bounds, paintType)) {
+        if (isPathExpensive(path)) {
+            ImageBuffer* buffer = imageBuffer();
+            if (buffer)
+                buffer->setHasExpensiveOp();
+        }
+    }
+}
+
+static SkPath::FillType parseWinding(const String& windingRuleString)
+{
+    if (windingRuleString == "nonzero")
+        return SkPath::kWinding_FillType;
+    if (windingRuleString == "evenodd")
+        return SkPath::kEvenOdd_FillType;
+
+    ASSERT_NOT_REACHED();
+    return SkPath::kEvenOdd_FillType;
+}
+
+void BaseRenderingContext2D::fill(const String& windingRuleString)
+{
+    drawPathInternal(m_path, CanvasRenderingContext2DState::FillPaintType, parseWinding(windingRuleString));
+}
+
+void BaseRenderingContext2D::fill(Path2D* domPath, const String& windingRuleString)
+{
+    drawPathInternal(domPath->path(), CanvasRenderingContext2DState::FillPaintType, parseWinding(windingRuleString));
+}
+
+void BaseRenderingContext2D::stroke()
+{
+    drawPathInternal(m_path, CanvasRenderingContext2DState::StrokePaintType);
+}
+
+void BaseRenderingContext2D::stroke(Path2D* domPath)
+{
+    drawPathInternal(domPath->path(), CanvasRenderingContext2DState::StrokePaintType);
+}
+
+void BaseRenderingContext2D::fillRect(double x, double y, double width, double height)
+{
+    if (!validateRectForCanvas(x, y, width, height))
+        return;
+
+    if (!drawingCanvas())
+        return;
+
+    SkRect rect = SkRect::MakeXYWH(x, y, width, height);
+    draw(
+        [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
+        {
+            c->drawRect(rect, *paint);
+        },
+        [&rect, this](const SkIRect& clipBounds) // overdraw test lambda
+        {
+            return rectContainsTransformedRect(rect, clipBounds);
+        }, rect, CanvasRenderingContext2DState::FillPaintType);
+}
+
+static void strokeRectOnCanvas(const FloatRect& rect, SkCanvas* canvas, const SkPaint* paint)
+{
+    ASSERT(paint->getStyle() == SkPaint::kStroke_Style);
+    if ((rect.width() > 0) != (rect.height() > 0)) {
+        // When stroking, we must skip the zero-dimension segments
+        SkPath path;
+        path.moveTo(rect.x(), rect.y());
+        path.lineTo(rect.maxX(), rect.maxY());
+        path.close();
+        canvas->drawPath(path, *paint);
+        return;
+    }
+    canvas->drawRect(rect, *paint);
+}
+
+void BaseRenderingContext2D::strokeRect(double x, double y, double width, double height)
+{
+    if (!validateRectForCanvas(x, y, width, height))
+        return;
+
+    if (!drawingCanvas())
+        return;
+
+    SkRect rect = SkRect::MakeXYWH(x, y, width, height);
+    FloatRect bounds = rect;
+    inflateStrokeRect(bounds);
+    draw(
+        [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
+        {
+            strokeRectOnCanvas(rect, c, paint);
+        },
+        [](const SkIRect& clipBounds) // overdraw test lambda
+        {
+            return false;
+        }, bounds, CanvasRenderingContext2DState::StrokePaintType);
+}
+
+void BaseRenderingContext2D::clipInternal(const Path& path, const String& windingRuleString)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c) {
+        return;
+    }
+    if (!state().isTransformInvertible()) {
+        return;
+    }
+
+    SkPath skPath = path.skPath();
+    skPath.setFillType(parseWinding(windingRuleString));
+    modifiableState().clipPath(skPath, m_clipAntialiasing);
+    c->clipPath(skPath, SkRegion::kIntersect_Op, m_clipAntialiasing == AntiAliased);
+    if (ExpensiveCanvasHeuristicParameters::ComplexClipsAreExpensive && !skPath.isRect(0) && hasImageBuffer()) {
+        imageBuffer()->setHasExpensiveOp();
+    }
+}
+
+void BaseRenderingContext2D::clip(const String& windingRuleString)
+{
+    clipInternal(m_path, windingRuleString);
+}
+
+void BaseRenderingContext2D::clip(Path2D* domPath, const String& windingRuleString)
+{
+    clipInternal(domPath->path(), windingRuleString);
+}
+
+bool BaseRenderingContext2D::isPointInPath(const double x, const double y, const String& windingRuleString)
+{
+    return isPointInPathInternal(m_path, x, y, windingRuleString);
+}
+
+bool BaseRenderingContext2D::isPointInPath(Path2D* domPath, const double x, const double y, const String& windingRuleString)
+{
+    return isPointInPathInternal(domPath->path(), x, y, windingRuleString);
+}
+
+bool BaseRenderingContext2D::isPointInPathInternal(const Path& path, const double x, const double y, const String& windingRuleString)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return false;
+    if (!state().isTransformInvertible())
+        return false;
+
+    FloatPoint point(x, y);
+    if (!std::isfinite(point.x()) || !std::isfinite(point.y()))
+        return false;
+    AffineTransform ctm = state().transform();
+    FloatPoint transformedPoint = ctm.inverse().mapPoint(point);
+
+    return path.contains(transformedPoint, SkFillTypeToWindRule(parseWinding(windingRuleString)));
+}
+
+bool BaseRenderingContext2D::isPointInStroke(const double x, const double y)
+{
+    return isPointInStrokeInternal(m_path, x, y);
+}
+
+bool BaseRenderingContext2D::isPointInStroke(Path2D* domPath, const double x, const double y)
+{
+    return isPointInStrokeInternal(domPath->path(), x, y);
+}
+
+bool BaseRenderingContext2D::isPointInStrokeInternal(const Path& path, const double x, const double y)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return false;
+    if (!state().isTransformInvertible())
+        return false;
+
+    FloatPoint point(x, y);
+    if (!std::isfinite(point.x()) || !std::isfinite(point.y()))
+        return false;
+    AffineTransform ctm = state().transform();
+    FloatPoint transformedPoint = ctm.inverse().mapPoint(point);
+
+    StrokeData strokeData;
+    strokeData.setThickness(state().lineWidth());
+    strokeData.setLineCap(state().lineCap());
+    strokeData.setLineJoin(state().lineJoin());
+    strokeData.setMiterLimit(state().miterLimit());
+    Vector<float> lineDash(state().lineDash().size());
+    std::copy(state().lineDash().begin(), state().lineDash().end(), lineDash.begin());
+    strokeData.setLineDash(lineDash, state().lineDashOffset());
+    return path.strokeContains(transformedPoint, strokeData);
+}
+
+void BaseRenderingContext2D::clearRect(double x, double y, double width, double height)
+{
+    if (!validateRectForCanvas(x, y, width, height))
+        return;
+
+    SkCanvas* c = drawingCanvas();
+    if (!c)
+        return;
+    if (!state().isTransformInvertible())
+        return;
+
+    SkIRect clipBounds;
+    if (!c->getClipDeviceBounds(&clipBounds))
+        return;
+
+    SkPaint clearPaint;
+    clearPaint.setXfermodeMode(SkXfermode::kClear_Mode);
+    clearPaint.setStyle(SkPaint::kFill_Style);
+    FloatRect rect(x, y, width, height);
+
+    if (rectContainsTransformedRect(rect, clipBounds)) {
+        checkOverdraw(rect, &clearPaint, CanvasRenderingContext2DState::NoImage, ClipFill);
+        if (drawingCanvas())
+            drawingCanvas()->drawRect(rect, clearPaint);
+        didDraw(clipBounds);
+    } else {
+        SkIRect dirtyRect;
+        if (computeDirtyRect(rect, clipBounds, &dirtyRect)) {
+            c->drawRect(rect, clearPaint);
+            didDraw(dirtyRect);
+        }
+    }
+}
+
+static inline FloatRect normalizeRect(const FloatRect& rect)
+{
+    return FloatRect(std::min(rect.x(), rect.maxX()),
+        std::min(rect.y(), rect.maxY()),
+        std::max(rect.width(), -rect.width()),
+        std::max(rect.height(), -rect.height()));
+}
+
+static inline void clipRectsToImageRect(const FloatRect& imageRect, FloatRect* srcRect, FloatRect* dstRect)
+{
+    if (imageRect.contains(*srcRect))
+        return;
+
+    // Compute the src to dst transform
+    FloatSize scale(dstRect->size().width() / srcRect->size().width(), dstRect->size().height() / srcRect->size().height());
+    FloatPoint scaledSrcLocation = srcRect->location();
+    scaledSrcLocation.scale(scale.width(), scale.height());
+    FloatSize offset = dstRect->location() - scaledSrcLocation;
+
+    srcRect->intersect(imageRect);
+
+    // To clip the destination rectangle in the same proportion, transform the clipped src rect
+    *dstRect = *srcRect;
+    dstRect->scale(scale.width(), scale.height());
+    dstRect->move(offset);
+}
+
+static inline CanvasImageSource* toImageSourceInternal(const CanvasImageSourceUnion& value)
+{
+    if (value.isHTMLImageElement())
+        return value.getAsHTMLImageElement().get();
+    if (value.isHTMLVideoElement())
+        return value.getAsHTMLVideoElement().get();
+    if (value.isHTMLCanvasElement())
+        return value.getAsHTMLCanvasElement().get();
+    if (value.isImageBitmap())
+        return value.getAsImageBitmap().get();
+    ASSERT_NOT_REACHED();
+    return nullptr;
+}
+
+void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource, double x, double y, ExceptionState& exceptionState)
+{
+    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
+    FloatSize sourceRectSize = imageSourceInternal->elementSize();
+    FloatSize destRectSize = imageSourceInternal->defaultDestinationSize();
+    drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, destRectSize.width(), destRectSize.height(), exceptionState);
+}
+
+void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource,
+    double x, double y, double width, double height, ExceptionState& exceptionState)
+{
+    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
+    FloatSize sourceRectSize = imageSourceInternal->elementSize();
+    drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, width, height, exceptionState);
+}
+
+void BaseRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource,
+    double sx, double sy, double sw, double sh,
+    double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
+{
+    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
+    drawImage(imageSourceInternal, sx, sy, sw, sh, dx, dy, dw, dh, exceptionState);
+}
+
+bool BaseRenderingContext2D::shouldDrawImageAntialiased(const FloatRect& destRect) const
+{
+    if (!state().shouldAntialias())
+        return false;
+    SkCanvas* c = drawingCanvas();
+    ASSERT(c);
+
+    const SkMatrix &ctm = c->getTotalMatrix();
+    // Don't disable anti-aliasing if we're rotated or skewed.
+    if (!ctm.rectStaysRect())
+        return true;
+    // Check if the dimensions of the destination are "small" (less than one
+    // device pixel). To prevent sudden drop-outs. Since we know that
+    // kRectStaysRect_Mask is set, the matrix either has scale and no skew or
+    // vice versa. We can query the kAffine_Mask flag to determine which case
+    // it is.
+    // FIXME: This queries the CTM while drawing, which is generally
+    // discouraged. Always drawing with AA can negatively impact performance
+    // though - that's why it's not always on.
+    SkScalar widthExpansion, heightExpansion;
+    if (ctm.getType() & SkMatrix::kAffine_Mask)
+        widthExpansion = ctm[SkMatrix::kMSkewY], heightExpansion = ctm[SkMatrix::kMSkewX];
+    else
+        widthExpansion = ctm[SkMatrix::kMScaleX], heightExpansion = ctm[SkMatrix::kMScaleY];
+    return destRect.width() * fabs(widthExpansion) < 1 || destRect.height() * fabs(heightExpansion) < 1;
+}
+
+void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* imageSource, Image* image, const FloatRect& srcRect, const FloatRect& dstRect, const SkPaint* paint)
+{
+    int initialSaveCount = c->getSaveCount();
+    SkPaint imagePaint = *paint;
+
+    if (paint->getImageFilter()) {
+        SkMatrix invCtm;
+        if (!c->getTotalMatrix().invert(&invCtm)) {
+            // There is an earlier check for invertibility, but the arithmetic
+            // in AffineTransform is not exactly identical, so it is possible
+            // for SkMatrix to find the transform to be non-invertible at this stage.
+            // crbug.com/504687
+            return;
+        }
+        SkRect bounds = dstRect;
+        SkPaint layerPaint;
+        layerPaint.setXfermode(paint->getXfermode());
+        SkAutoTUnref<SkImageFilter> localFilter(paint->getImageFilter()->newWithLocalMatrix(invCtm));
+        layerPaint.setImageFilter(localFilter);
+        c->saveLayer(&bounds, &layerPaint);
+        imagePaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+        imagePaint.setImageFilter(nullptr);
+    }
+
+    if (!imageSource->isVideoElement()) {
+        imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect));
+        image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientation, Image::DoNotClampImageToSourceRect);
+    } else {
+        c->save();
+        c->clipRect(dstRect);
+        c->translate(dstRect.x(), dstRect.y());
+        c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.height());
+        c->translate(-srcRect.x(), -srcRect.y());
+        HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource);
+        video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidth(), video->videoHeight())), &imagePaint);
+    }
+
+    c->restoreToCount(initialSaveCount);
+}
+
+bool shouldDisableDeferral(CanvasImageSource* imageSource, DisableDeferralReason* reason)
+{
+    ASSERT(reason);
+    ASSERT(*reason == DisableDeferralReasonUnknown);
+
+    if (imageSource->isVideoElement()) {
+        *reason = DisableDeferralReasonDrawImageOfVideo;
+        return true;
+    }
+    if (imageSource->isCanvasElement()) {
+        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(imageSource);
+        if (canvas->isAnimated2D()) {
+            *reason = DisableDeferralReasonDrawImageOfAnimated2dCanvas;
+            return true;
+        }
+    }
+    return false;
+}
+
+void BaseRenderingContext2D::drawImage(CanvasImageSource* imageSource,
+    double sx, double sy, double sw, double sh,
+    double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
+{
+    if (!drawingCanvas())
+        return;
+
+    RefPtr<Image> image;
+    SourceImageStatus sourceImageStatus = InvalidSourceImageStatus;
+    if (!imageSource->isVideoElement()) {
+        AccelerationHint hint = imageBuffer()->isAccelerated() ? PreferAcceleration : PreferNoAcceleration;
+        image = imageSource->getSourceImageForCanvas(&sourceImageStatus, hint, SnapshotReasonDrawImage);
+        if (sourceImageStatus == UndecodableSourceImageStatus)
+            exceptionState.throwDOMException(InvalidStateError, "The HTMLImageElement provided is in the 'broken' state.");
+        if (!image || !image->width() || !image->height())
+            return;
+    } else {
+        if (!static_cast<HTMLVideoElement*>(imageSource)->hasAvailableVideoFrame())
+            return;
+    }
+
+    if (!std::isfinite(dx) || !std::isfinite(dy) || !std::isfinite(dw) || !std::isfinite(dh)
+        || !std::isfinite(sx) || !std::isfinite(sy) || !std::isfinite(sw) || !std::isfinite(sh)
+        || !dw || !dh || !sw || !sh)
+        return;
+
+    FloatRect srcRect = normalizeRect(FloatRect(sx, sy, sw, sh));
+    FloatRect dstRect = normalizeRect(FloatRect(dx, dy, dw, dh));
+
+    clipRectsToImageRect(FloatRect(FloatPoint(), imageSource->elementSize()), &srcRect, &dstRect);
+
+    imageSource->adjustDrawRects(&srcRect, &dstRect);
+
+    if (srcRect.isEmpty())
+        return;
+
+    DisableDeferralReason reason = DisableDeferralReasonUnknown;
+    if (shouldDisableDeferral(imageSource, &reason) || image->isTextureBacked())
+        disableDeferral(reason);
+
+    validateStateStack();
+
+    draw(
+        [this, &imageSource, &image, &srcRect, dstRect](SkCanvas* c, const SkPaint* paint) // draw lambda
+        {
+            drawImageInternal(c, imageSource, image.get(), srcRect, dstRect, paint);
+        },
+        [this, &dstRect](const SkIRect& clipBounds) // overdraw test lambda
+        {
+            return rectContainsTransformedRect(dstRect, clipBounds);
+        }, dstRect, CanvasRenderingContext2DState::ImagePaintType,
+        imageSource->isOpaque() ? CanvasRenderingContext2DState::OpaqueImage : CanvasRenderingContext2DState::NonOpaqueImage);
+
+    validateStateStack();
+
+    bool isExpensive = false;
+
+    if (ExpensiveCanvasHeuristicParameters::SVGImageSourcesAreExpensive && imageSource->isSVGSource())
+        isExpensive = true;
+
+    if (imageSource->elementSize().width() * imageSource->elementSize().height() > width() * height() * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio)
+        isExpensive = true;
+
+    if (isExpensive) {
+        ImageBuffer* buffer = imageBuffer();
+        if (buffer)
+            buffer->setHasExpensiveOp();
+    }
+
+    if (imageSource->isCanvasElement() && static_cast<HTMLCanvasElement*>(imageSource)->is3D()) {
+        // WebGL to 2D canvas: must flush graphics context to prevent a race
+        // FIXME: crbug.com/516331 Fix the underlying synchronization issue so this flush can be eliminated.
+        imageBuffer()->flushGpu(FlushReasonDrawImageOfWebGL);
+    }
+
+    if (originClean() && wouldTaintOrigin(imageSource))
+        setOriginTainted();
+}
+
+void BaseRenderingContext2D::clearCanvas()
+{
+    FloatRect canvasRect(0, 0, width(), height());
+    checkOverdraw(canvasRect, 0, CanvasRenderingContext2DState::NoImage, ClipFill);
+    SkCanvas* c = drawingCanvas();
+    if (c)
+        c->clear(hasAlpha() ? SK_ColorTRANSPARENT : SK_ColorBLACK);
+}
+
+bool BaseRenderingContext2D::rectContainsTransformedRect(const FloatRect& rect, const SkIRect& transformedRect) const
+{
+    FloatQuad quad(rect);
+    FloatQuad transformedQuad(FloatRect(transformedRect.x(), transformedRect.y(), transformedRect.width(), transformedRect.height()));
+    return state().transform().mapQuad(quad).containsQuad(transformedQuad);
+}
+
+CanvasGradient* BaseRenderingContext2D::createLinearGradient(double x0, double y0, double x1, double y1)
+{
+    CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatPoint(x1, y1));
+    return gradient;
+}
+
+CanvasGradient* BaseRenderingContext2D::createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState& exceptionState)
+{
+    if (r0 < 0 || r1 < 0) {
+        exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
+        return nullptr;
+    }
+
+    CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, FloatPoint(x1, y1), r1);
+    return gradient;
+}
+
+CanvasPattern* BaseRenderingContext2D::createPattern(const CanvasImageSourceUnion& imageSource, const String& repetitionType, ExceptionState& exceptionState)
+{
+    Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetitionType, exceptionState);
+    if (exceptionState.hadException())
+        return nullptr;
+
+    SourceImageStatus status;
+    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
+    RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanvas(&status, PreferNoAcceleration, SnapshotReasonCreatePattern);
+
+    switch (status) {
+    case NormalSourceImageStatus:
+        break;
+    case ZeroSizeCanvasSourceImageStatus:
+        exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize().width() ? "height" : "width"));
+        return nullptr;
+    case UndecodableSourceImageStatus:
+        exceptionState.throwDOMException(InvalidStateError, "Source image is in the 'broken' state.");
+        return nullptr;
+    case InvalidSourceImageStatus:
+        imageForRendering = Image::nullImage();
+        break;
+    case IncompleteSourceImageStatus:
+        return nullptr;
+    default:
+        ASSERT_NOT_REACHED();
+        return nullptr;
+    }
+    ASSERT(imageForRendering);
+
+    bool originClean = !wouldTaintOrigin(imageSourceInternal);
+
+    return CanvasPattern::create(imageForRendering.release(), repeatMode, originClean);
+}
+
+bool BaseRenderingContext2D::computeDirtyRect(const FloatRect& localRect, SkIRect* dirtyRect)
+{
+    SkIRect clipBounds;
+    if (!drawingCanvas()->getClipDeviceBounds(&clipBounds))
+        return false;
+    return computeDirtyRect(localRect, clipBounds, dirtyRect);
+}
+
+bool BaseRenderingContext2D::computeDirtyRect(const FloatRect& localRect, const SkIRect& transformedClipBounds, SkIRect* dirtyRect)
+{
+    FloatRect canvasRect = state().transform().mapRect(localRect);
+
+    if (alphaChannel(state().shadowColor())) {
+        FloatRect shadowRect(canvasRect);
+        shadowRect.move(state().shadowOffset());
+        shadowRect.inflate(state().shadowBlur());
+        canvasRect.unite(shadowRect);
+    }
+
+    SkIRect canvasIRect;
+    static_cast<SkRect>(canvasRect).roundOut(&canvasIRect);
+    if (!canvasIRect.intersect(transformedClipBounds))
+        return false;
+
+    if (dirtyRect)
+        *dirtyRect = canvasIRect;
+
+    return true;
+}
+
+ImageData* BaseRenderingContext2D::createImageData(ImageData* imageData) const
+{
+    return ImageData::create(imageData->size());
+}
+
+ImageData* BaseRenderingContext2D::createImageData(double sw, double sh, ExceptionState& exceptionState) const
+{
+    if (!sw || !sh) {
+        exceptionState.throwDOMException(IndexSizeError, String::format("The source %s is 0.", sw ? "height" : "width"));
+        return nullptr;
+    }
+
+    FloatSize logicalSize(fabs(sw), fabs(sh));
+    if (!logicalSize.isExpressibleAsIntSize())
+        return nullptr;
+
+    IntSize size = expandedIntSize(logicalSize);
+    if (size.width() < 1)
+        size.setWidth(1);
+    if (size.height() < 1)
+        size.setHeight(1);
+
+    return ImageData::create(size);
+}
+
+ImageData* BaseRenderingContext2D::getImageData(double sx, double sy, double sw, double sh, ExceptionState& exceptionState) const
+{
+    if (!originClean())
+        exceptionState.throwSecurityError("The canvas has been tainted by cross-origin data.");
+    else if (!sw || !sh)
+        exceptionState.throwDOMException(IndexSizeError, String::format("The source %s is 0.", sw ? "height" : "width"));
+
+    if (exceptionState.hadException())
+        return nullptr;
+
+    if (sw < 0) {
+        sx += sw;
+        sw = -sw;
+    }
+    if (sh < 0) {
+        sy += sh;
+        sh = -sh;
+    }
+
+    FloatRect logicalRect(sx, sy, sw, sh);
+    if (logicalRect.width() < 1)
+        logicalRect.setWidth(1);
+    if (logicalRect.height() < 1)
+        logicalRect.setHeight(1);
+    if (!logicalRect.isExpressibleAsIntRect())
+        return nullptr;
+
+    IntRect imageDataRect = enclosingIntRect(logicalRect);
+    ImageBuffer* buffer = imageBuffer();
+    if (!buffer || isContextLost())
+        return ImageData::create(imageDataRect.size());
+
+    WTF::ArrayBufferContents contents;
+    if (!buffer->getImageData(Unmultiplied, imageDataRect, contents))
+        return nullptr;
+
+    RefPtr<DOMArrayBuffer> arrayBuffer = DOMArrayBuffer::create(contents);
+    return ImageData::create(
+        imageDataRect.size(),
+        DOMUint8ClampedArray::create(arrayBuffer, 0, arrayBuffer->byteLength()));
+}
+
+void BaseRenderingContext2D::putImageData(ImageData* data, double dx, double dy, ExceptionState& exceptionState)
+{
+    putImageData(data, dx, dy, 0, 0, data->width(), data->height(), exceptionState);
+}
+
+void BaseRenderingContext2D::putImageData(ImageData* data, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight, ExceptionState& exceptionState)
+{
+    if (data->data()->bufferBase()->isNeutered()) {
+        exceptionState.throwDOMException(InvalidStateError, "The source data has been neutered.");
+        return;
+    }
+    ImageBuffer* buffer = imageBuffer();
+    if (!buffer)
+        return;
+
+    if (dirtyWidth < 0) {
+        dirtyX += dirtyWidth;
+        dirtyWidth = -dirtyWidth;
+    }
+
+    if (dirtyHeight < 0) {
+        dirtyY += dirtyHeight;
+        dirtyHeight = -dirtyHeight;
+    }
+
+    FloatRect clipRect(dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+    clipRect.intersect(IntRect(0, 0, data->width(), data->height()));
+    IntSize destOffset(static_cast<int>(dx), static_cast<int>(dy));
+    IntRect destRect = enclosingIntRect(clipRect);
+    destRect.move(destOffset);
+    destRect.intersect(IntRect(IntPoint(), buffer->size()));
+    if (destRect.isEmpty())
+        return;
+    IntRect sourceRect(destRect);
+    sourceRect.move(-destOffset);
+
+    checkOverdraw(destRect, 0, CanvasRenderingContext2DState::NoImage, UntransformedUnclippedFill);
+
+    buffer->putByteArray(Unmultiplied, data->data()->data(), IntSize(data->width(), data->height()), sourceRect, IntPoint(destOffset));
+
+    didDraw(destRect);
+}
+
+void BaseRenderingContext2D::inflateStrokeRect(FloatRect& rect) const
+{
+    // Fast approximation of the stroke's bounding rect.
+    // This yields a slightly oversized rect but is very fast
+    // compared to Path::strokeBoundingRect().
+    static const double root2 = sqrtf(2);
+    double delta = state().lineWidth() / 2;
+    if (state().lineJoin() == MiterJoin)
+        delta *= state().miterLimit();
+    else if (state().lineCap() == SquareCap)
+        delta *= root2;
+
+    rect.inflate(delta);
+}
+
+bool BaseRenderingContext2D::imageSmoothingEnabled() const
+{
+    return state().imageSmoothingEnabled();
+}
+
+void BaseRenderingContext2D::setImageSmoothingEnabled(bool enabled)
+{
+    if (enabled == state().imageSmoothingEnabled())
+        return;
+
+    modifiableState().setImageSmoothingEnabled(enabled);
+}
+
+String BaseRenderingContext2D::imageSmoothingQuality() const
+{
+    return state().imageSmoothingQuality();
+}
+
+void BaseRenderingContext2D::setImageSmoothingQuality(const String& quality)
+{
+    if (quality == state().imageSmoothingQuality())
+        return;
+
+    modifiableState().setImageSmoothingQuality(quality);
+}
+
+void BaseRenderingContext2D::checkOverdraw(const SkRect& rect, const SkPaint* paint, CanvasRenderingContext2DState::ImageType imageType, DrawType drawType)
+{
+    SkCanvas* c = drawingCanvas();
+    if (!c || !imageBuffer()->isRecording())
+        return;
+
+    SkRect deviceRect;
+    if (drawType == UntransformedUnclippedFill) {
+        deviceRect = rect;
+    } else {
+        ASSERT(drawType == ClipFill);
+        if (state().hasComplexClip())
+            return;
+
+        SkIRect skIBounds;
+        if (!c->getClipDeviceBounds(&skIBounds))
+            return;
+        deviceRect = SkRect::Make(skIBounds);
+    }
+
+    const SkImageInfo& imageInfo = c->imageInfo();
+    if (!deviceRect.contains(SkRect::MakeWH(imageInfo.width(), imageInfo.height())))
+        return;
+
+    bool isSourceOver = true;
+    unsigned alpha = 0xFF;
+    if (paint) {
+        if (paint->getLooper() || paint->getImageFilter() || paint->getMaskFilter())
+            return;
+
+        SkXfermode* xfermode = paint->getXfermode();
+        if (xfermode) {
+            SkXfermode::Mode mode;
+            if (xfermode->asMode(&mode)) {
+                isSourceOver = mode == SkXfermode::kSrcOver_Mode;
+                if (!isSourceOver && mode != SkXfermode::kSrc_Mode && mode != SkXfermode::kClear_Mode)
+                    return; // The code below only knows how to handle Src, SrcOver, and Clear
+            } else {
+                // unknown xfermode
+                ASSERT_NOT_REACHED();
+                return;
+            }
+        }
+
+        alpha = paint->getAlpha();
+
+        if (isSourceOver && imageType == CanvasRenderingContext2DState::NoImage) {
+            SkShader* shader = paint->getShader();
+            if (shader) {
+                if (shader->isOpaque() && alpha == 0xFF)
+                    imageBuffer()->willOverwriteCanvas();
+                return;
+            }
+        }
+    }
+
+    if (isSourceOver) {
+        // With source over, we need to certify that alpha == 0xFF for all pixels
+        if (imageType == CanvasRenderingContext2DState::NonOpaqueImage)
+            return;
+        if (alpha < 0xFF)
+            return;
+    }
+
+    imageBuffer()->willOverwriteCanvas();
+}
+
+DEFINE_TRACE(BaseRenderingContext2D)
+{
+    visitor->trace(m_stateStack);
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
new file mode 100644
index 0000000..8003fed1
--- /dev/null
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
@@ -0,0 +1,292 @@
+// 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 BaseRenderingContext2D_h
+#define BaseRenderingContext2D_h
+
+#include "bindings/core/v8/UnionTypesCore.h"
+#include "bindings/modules/v8/UnionTypesModules.h"
+#include "core/html/canvas/CanvasRenderingContext.h"
+#include "modules/ModulesExport.h"
+#include "modules/canvas2d/CanvasGradient.h"
+#include "modules/canvas2d/CanvasPathMethods.h"
+#include "modules/canvas2d/CanvasRenderingContext2DState.h"
+#include "modules/canvas2d/CanvasStyle.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+
+namespace blink {
+
+class CanvasImageSource;
+class Color;
+class Image;
+class ImageBuffer;
+class Path2D;
+class SVGMatrixTearOff;
+
+typedef HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap CanvasImageSourceUnion;
+
+class MODULES_EXPORT BaseRenderingContext2D : public WillBeGarbageCollectedMixin, public CanvasPathMethods {
+    WTF_MAKE_NONCOPYABLE(BaseRenderingContext2D);
+public:
+    ~BaseRenderingContext2D() override;
+
+    void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const;
+    void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&);
+
+    void fillStyle(StringOrCanvasGradientOrCanvasPattern&) const;
+    void setFillStyle(const StringOrCanvasGradientOrCanvasPattern&);
+
+    double lineWidth() const;
+    void setLineWidth(double);
+
+    String lineCap() const;
+    void setLineCap(const String&);
+
+    String lineJoin() const;
+    void setLineJoin(const String&);
+
+    double miterLimit() const;
+    void setMiterLimit(double);
+
+    const Vector<double>& getLineDash() const;
+    void setLineDash(const Vector<double>&);
+
+    double lineDashOffset() const;
+    void setLineDashOffset(double);
+
+    double shadowOffsetX() const;
+    void setShadowOffsetX(double);
+
+    double shadowOffsetY() const;
+    void setShadowOffsetY(double);
+
+    double shadowBlur() const;
+    void setShadowBlur(double);
+
+    String shadowColor() const;
+    void setShadowColor(const String&);
+
+    double globalAlpha() const;
+    void setGlobalAlpha(double);
+
+    String globalCompositeOperation() const;
+    void setGlobalCompositeOperation(const String&);
+
+    String filter() const;
+    void setFilter(const String&);
+
+    void save();
+    void restore();
+
+    PassRefPtrWillBeRawPtr<SVGMatrixTearOff> currentTransform() const;
+    void setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff>);
+
+    void scale(double sx, double sy);
+    void rotate(double angleInRadians);
+    void translate(double tx, double ty);
+    void transform(double m11, double m12, double m21, double m22, double dx, double dy);
+    void setTransform(double m11, double m12, double m21, double m22, double dx, double dy);
+    void resetTransform();
+
+    void beginPath();
+
+    void fill(const String& winding = "nonzero");
+    void fill(Path2D*, const String& winding = "nonzero");
+    void stroke();
+    void stroke(Path2D*);
+    void clip(const String& winding = "nonzero");
+    void clip(Path2D*, const String& winding = "nonzero");
+
+    bool isPointInPath(const double x, const double y, const String& winding = "nonzero");
+    bool isPointInPath(Path2D*, const double x, const double y, const String& winding = "nonzero");
+    bool isPointInStroke(const double x, const double y);
+    bool isPointInStroke(Path2D*, const double x, const double y);
+
+    void clearRect(double x, double y, double width, double height);
+    void fillRect(double x, double y, double width, double height);
+    void strokeRect(double x, double y, double width, double height);
+
+    void drawImage(const CanvasImageSourceUnion&, double x, double y, ExceptionState&);
+    void drawImage(const CanvasImageSourceUnion&, double x, double y, double width, double height, ExceptionState&);
+    void drawImage(const CanvasImageSourceUnion&, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&);
+    void drawImage(CanvasImageSource*, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&);
+
+    CanvasGradient* createLinearGradient(double x0, double y0, double x1, double y1);
+    CanvasGradient* createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState&);
+    CanvasPattern* createPattern(const CanvasImageSourceUnion&, const String& repetitionType, ExceptionState&);
+
+    ImageData* createImageData(ImageData*) const;
+    ImageData* createImageData(double width, double height, ExceptionState&) const;
+    ImageData* getImageData(double sx, double sy, double sw, double sh, ExceptionState&) const;
+    void putImageData(ImageData*, double dx, double dy, ExceptionState&);
+    void putImageData(ImageData*, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight, ExceptionState&);
+
+    bool imageSmoothingEnabled() const;
+    void setImageSmoothingEnabled(bool);
+    String imageSmoothingQuality() const;
+    void setImageSmoothingQuality(const String&);
+
+    virtual bool originClean() const = 0;
+    virtual void setOriginTainted() = 0;
+    virtual bool wouldTaintOrigin(CanvasImageSource*) = 0;
+
+    virtual int width() const = 0;
+    virtual int height() const = 0;
+
+    virtual bool hasImageBuffer() const = 0;
+    virtual ImageBuffer* imageBuffer() const = 0;
+
+    virtual bool parseColorOrCurrentColor(Color&, const String& colorString) const = 0;
+
+    virtual SkCanvas* drawingCanvas() const = 0;
+    virtual SkCanvas* existingDrawingCanvas() const = 0;
+    virtual void disableDeferral(DisableDeferralReason) = 0;
+
+    virtual AffineTransform baseTransform() const = 0;
+
+    virtual void didDraw(const SkIRect& dirtyRect) = 0;
+
+    virtual bool stateHasFilter() = 0;
+    virtual SkImageFilter* stateGetFilter() = 0;
+
+    virtual void validateStateStack() = 0;
+
+    virtual bool hasAlpha() const = 0;
+
+    virtual bool isContextLost() const = 0;
+
+    DECLARE_VIRTUAL_TRACE();
+
+protected:
+    BaseRenderingContext2D();
+
+    CanvasRenderingContext2DState& modifiableState();
+    const CanvasRenderingContext2DState& state() const { return *m_stateStack.last(); }
+
+    bool computeDirtyRect(const FloatRect& localBounds, SkIRect*);
+    bool computeDirtyRect(const FloatRect& localBounds, const SkIRect& transformedClipBounds, SkIRect*);
+
+    template<typename DrawFunc, typename ContainsFunc>
+    bool draw(const DrawFunc&, const ContainsFunc&, const SkRect& bounds, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType = CanvasRenderingContext2DState::NoImage);
+
+    void inflateStrokeRect(FloatRect&) const;
+
+    enum DrawType {
+        ClipFill, // Fill that is already known to cover the current clip
+        UntransformedUnclippedFill
+    };
+
+    void checkOverdraw(const SkRect&, const SkPaint*, CanvasRenderingContext2DState::ImageType, DrawType);
+
+    WillBeHeapVector<OwnPtrWillBeMember<CanvasRenderingContext2DState>> m_stateStack;
+    AntiAliasingMode m_clipAntialiasing;
+
+private:
+    void realizeSaves();
+
+    bool shouldDrawImageAntialiased(const FloatRect& destRect) const;
+
+    void drawPathInternal(const Path&, CanvasRenderingContext2DState::PaintType, SkPath::FillType = SkPath::kWinding_FillType);
+    void drawImageInternal(SkCanvas*, CanvasImageSource*, Image*, const FloatRect& srcRect, const FloatRect& dstRect, const SkPaint*);
+    void clipInternal(const Path&, const String& windingRuleString);
+
+    bool isPointInPathInternal(const Path&, const double x, const double y, const String& windingRuleString);
+    bool isPointInStrokeInternal(const Path&, const double x, const double y);
+
+    static bool isFullCanvasCompositeMode(SkXfermode::Mode);
+
+    template<typename DrawFunc>
+    void compositedDraw(const DrawFunc&, SkCanvas*, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType);
+
+    void clearCanvas();
+    bool rectContainsTransformedRect(const FloatRect&, const SkIRect&) const;
+};
+
+template<typename DrawFunc, typename ContainsFunc>
+bool BaseRenderingContext2D::draw(const DrawFunc& drawFunc, const ContainsFunc& drawCoversClipBounds, const SkRect& bounds, CanvasRenderingContext2DState::PaintType paintType, CanvasRenderingContext2DState::ImageType imageType)
+{
+    if (!state().isTransformInvertible())
+        return false;
+
+    SkIRect clipBounds;
+    if (!drawingCanvas() || !drawingCanvas()->getClipDeviceBounds(&clipBounds))
+        return false;
+
+    // If gradient size is zero, then paint nothing.
+    CanvasStyle* style = state().style(paintType);
+    if (style) {
+        CanvasGradient* gradient = style->canvasGradient();
+        if (gradient && gradient->gradient()->isZeroSize())
+            return false;
+    }
+
+    if (isFullCanvasCompositeMode(state().globalComposite()) || stateHasFilter()) {
+        compositedDraw(drawFunc, drawingCanvas(), paintType, imageType);
+        didDraw(clipBounds);
+    } else if (state().globalComposite() == SkXfermode::kSrc_Mode) {
+        clearCanvas(); // takes care of checkOverdraw()
+        const SkPaint* paint = state().getPaint(paintType, DrawForegroundOnly, imageType);
+        drawFunc(drawingCanvas(), paint);
+        didDraw(clipBounds);
+    } else {
+        SkIRect dirtyRect;
+        if (computeDirtyRect(bounds, clipBounds, &dirtyRect)) {
+            const SkPaint* paint = state().getPaint(paintType, DrawShadowAndForeground, imageType);
+            if (paintType != CanvasRenderingContext2DState::StrokePaintType && drawCoversClipBounds(clipBounds))
+                checkOverdraw(bounds, paint, imageType, ClipFill);
+            drawFunc(drawingCanvas(), paint);
+            didDraw(dirtyRect);
+        }
+    }
+    return true;
+}
+
+template<typename DrawFunc>
+void BaseRenderingContext2D::compositedDraw(const DrawFunc& drawFunc, SkCanvas* c, CanvasRenderingContext2DState::PaintType paintType, CanvasRenderingContext2DState::ImageType imageType)
+{
+    SkImageFilter* filter = stateGetFilter();
+    ASSERT(isFullCanvasCompositeMode(state().globalComposite()) || filter);
+    SkMatrix ctm = c->getTotalMatrix();
+    c->resetMatrix();
+    SkPaint compositePaint;
+    compositePaint.setXfermodeMode(state().globalComposite());
+    if (state().shouldDrawShadows()) {
+        // unroll into two independently composited passes if drawing shadows
+        SkPaint shadowPaint = *state().getPaint(paintType, DrawShadowOnly, imageType);
+        int saveCount = c->getSaveCount();
+        if (filter) {
+            SkPaint filterPaint;
+            filterPaint.setImageFilter(filter);
+            // TODO(junov): crbug.com/502921 We could use primitive bounds if we knew that the filter
+            // does not affect transparent black regions.
+            c->saveLayer(nullptr, &shadowPaint);
+            c->saveLayer(nullptr, &filterPaint);
+            SkPaint foregroundPaint = *state().getPaint(paintType, DrawForegroundOnly, imageType);
+            c->setMatrix(ctm);
+            drawFunc(c, &foregroundPaint);
+        } else {
+            ASSERT(isFullCanvasCompositeMode(state().globalComposite()));
+            c->saveLayer(nullptr, &compositePaint);
+            shadowPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+            c->setMatrix(ctm);
+            drawFunc(c, &shadowPaint);
+        }
+        c->restoreToCount(saveCount);
+    }
+
+    compositePaint.setImageFilter(filter);
+    // TODO(junov): crbug.com/502921 We could use primitive bounds if we knew that the filter
+    // does not affect transparent black regions *and* !isFullCanvasCompositeMode
+    c->saveLayer(nullptr, &compositePaint);
+    SkPaint foregroundPaint = *state().getPaint(paintType, DrawForegroundOnly, imageType);
+    foregroundPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+    c->setMatrix(ctm);
+    drawFunc(c, &foregroundPaint);
+    c->restore();
+    c->setMatrix(ctm);
+}
+
+} // namespace blink
+
+#endif // BaseRenderingContext2D_h
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
index 69aca02..9637bc7 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
@@ -37,27 +37,19 @@
 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
 #include "core/CSSPropertyNames.h"
 #include "core/css/StylePropertySet.h"
-#include "core/css/parser/CSSParser.h"
 #include "core/css/resolver/StyleResolver.h"
 #include "core/dom/AXObjectCache.h"
 #include "core/dom/StyleEngine.h"
 #include "core/events/Event.h"
-#include "core/frame/ImageBitmap.h"
 #include "core/frame/Settings.h"
-#include "core/html/HTMLVideoElement.h"
-#include "core/html/ImageData.h"
 #include "core/html/TextMetrics.h"
 #include "core/html/canvas/CanvasFontCache.h"
 #include "core/layout/LayoutBox.h"
 #include "core/layout/LayoutTheme.h"
-#include "modules/canvas2d/CanvasGradient.h"
-#include "modules/canvas2d/CanvasPattern.h"
-#include "modules/canvas2d/CanvasRenderingContext2DState.h"
 #include "modules/canvas2d/CanvasStyle.h"
 #include "modules/canvas2d/HitRegion.h"
 #include "modules/canvas2d/Path2D.h"
 #include "platform/fonts/FontCache.h"
-#include "platform/geometry/FloatQuad.h"
 #include "platform/graphics/DrawLooperBuilder.h"
 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
 #include "platform/graphics/ImageBuffer.h"
@@ -118,7 +110,6 @@
 
 CanvasRenderingContext2D::CanvasRenderingContext2D(HTMLCanvasElement* canvas, const CanvasContextCreationAttributes& attrs, Document& document)
     : CanvasRenderingContext(canvas)
-    , m_clipAntialiasing(NotAntiAliased)
     , m_hasAlpha(attrs.alpha())
     , m_contextLostMode(NotLostContext)
     , m_contextRestorable(true)
@@ -130,7 +121,6 @@
 {
     if (document.settings() && document.settings()->antialiasedClips2dCanvasEnabled())
         m_clipAntialiasing = AntiAliased;
-    m_stateStack.append(CanvasRenderingContext2DState::create());
     setShouldAntialias(true);
 #if ENABLE(OILPAN)
     ThreadState::current()->registerPreFinalizer(this);
@@ -172,12 +162,6 @@
 #endif
 }
 
-CanvasRenderingContext2DState& CanvasRenderingContext2D::modifiableState()
-{
-    realizeSaves();
-    return *m_stateStack.last();
-}
-
 bool CanvasRenderingContext2D::isAccelerated() const
 {
     if (!canvas()->hasImageBuffer())
@@ -230,9 +214,9 @@
 
 DEFINE_TRACE(CanvasRenderingContext2D)
 {
-    visitor->trace(m_stateStack);
     visitor->trace(m_hitRegionManager);
     CanvasRenderingContext::trace(visitor);
+    BaseRenderingContext2D::trace(visitor);
 }
 
 void CanvasRenderingContext2D::dispatchContextLostEvent(Timer<CanvasRenderingContext2D>*)
@@ -318,834 +302,11 @@
     c->restore();
 }
 
-void CanvasRenderingContext2D::realizeSaves()
-{
-    validateStateStack();
-    if (state().hasUnrealizedSaves()) {
-        ASSERT(m_stateStack.size() >= 1);
-        // Reduce the current state's unrealized count by one now,
-        // to reflect the fact we are saving one state.
-        m_stateStack.last()->restore();
-        m_stateStack.append(CanvasRenderingContext2DState::create(state(), CanvasRenderingContext2DState::DontCopyClipList));
-        // Set the new state's unrealized count to 0, because it has no outstanding saves.
-        // We need to do this explicitly because the copy constructor and operator= used
-        // by the Vector operations copy the unrealized count from the previous state (in
-        // turn necessary to support correct resizing and unwinding of the stack).
-        m_stateStack.last()->resetUnrealizedSaveCount();
-        SkCanvas* canvas = drawingCanvas();
-        if (canvas)
-            canvas->save();
-        validateStateStack();
-    }
-}
-
-void CanvasRenderingContext2D::save()
-{
-    m_stateStack.last()->save();
-}
-
-void CanvasRenderingContext2D::restore()
-{
-    validateStateStack();
-    if (state().hasUnrealizedSaves()) {
-        // We never realized the save, so just record that it was unnecessary.
-        m_stateStack.last()->restore();
-        return;
-    }
-    ASSERT(m_stateStack.size() >= 1);
-    if (m_stateStack.size() <= 1)
-        return;
-    m_path.transform(state().transform());
-    m_stateStack.removeLast();
-    m_stateStack.last()->clearResolvedFilter();
-    m_path.transform(state().transform().inverse());
-    SkCanvas* c = drawingCanvas();
-    if (c)
-        c->restore();
-
-    validateStateStack();
-}
-
-static inline void convertCanvasStyleToUnionType(CanvasStyle* style, StringOrCanvasGradientOrCanvasPattern& returnValue)
-{
-    if (CanvasGradient* gradient = style->canvasGradient()) {
-        returnValue.setCanvasGradient(gradient);
-        return;
-    }
-    if (CanvasPattern* pattern = style->canvasPattern()) {
-        returnValue.setCanvasPattern(pattern);
-        return;
-    }
-    returnValue.setString(style->color());
-}
-
-void CanvasRenderingContext2D::strokeStyle(StringOrCanvasGradientOrCanvasPattern& returnValue) const
-{
-    convertCanvasStyleToUnionType(state().strokeStyle(), returnValue);
-}
-
-void CanvasRenderingContext2D::setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern& style)
-{
-    ASSERT(!style.isNull());
-
-    String colorString;
-    CanvasStyle* canvasStyle = nullptr;
-    if (style.isString()) {
-        colorString = style.getAsString();
-        if (colorString == state().unparsedStrokeColor())
-            return;
-        Color parsedColor = 0;
-        if (!parseColorOrCurrentColor(parsedColor, colorString, canvas()))
-            return;
-        if (state().strokeStyle()->isEquivalentRGBA(parsedColor.rgb())) {
-            modifiableState().setUnparsedStrokeColor(colorString);
-            return;
-        }
-        canvasStyle = CanvasStyle::createFromRGBA(parsedColor.rgb());
-    } else if (style.isCanvasGradient()) {
-        canvasStyle = CanvasStyle::createFromGradient(style.getAsCanvasGradient());
-    } else if (style.isCanvasPattern()) {
-        CanvasPattern* canvasPattern = style.getAsCanvasPattern();
-
-        if (canvas()->originClean() && !canvasPattern->originClean())
-            canvas()->setOriginTainted();
-
-        canvasStyle = CanvasStyle::createFromPattern(canvasPattern);
-    }
-
-    ASSERT(canvasStyle);
-
-    modifiableState().setStrokeStyle(canvasStyle);
-    modifiableState().setUnparsedStrokeColor(colorString);
-    modifiableState().clearResolvedFilter();
-}
-
-void CanvasRenderingContext2D::fillStyle(StringOrCanvasGradientOrCanvasPattern& returnValue) const
-{
-    convertCanvasStyleToUnionType(state().fillStyle(), returnValue);
-}
-
-void CanvasRenderingContext2D::setFillStyle(const StringOrCanvasGradientOrCanvasPattern& style)
-{
-    ASSERT(!style.isNull());
-    validateStateStack();
-    String colorString;
-    CanvasStyle* canvasStyle = nullptr;
-    if (style.isString()) {
-        colorString = style.getAsString();
-        if (colorString == state().unparsedFillColor())
-            return;
-        Color parsedColor = 0;
-        if (!parseColorOrCurrentColor(parsedColor, colorString, canvas()))
-            return;
-        if (state().fillStyle()->isEquivalentRGBA(parsedColor.rgb())) {
-            modifiableState().setUnparsedFillColor(colorString);
-            return;
-        }
-        canvasStyle = CanvasStyle::createFromRGBA(parsedColor.rgb());
-    } else if (style.isCanvasGradient()) {
-        canvasStyle = CanvasStyle::createFromGradient(style.getAsCanvasGradient());
-    } else if (style.isCanvasPattern()) {
-        CanvasPattern* canvasPattern = style.getAsCanvasPattern();
-
-        if (canvas()->originClean() && !canvasPattern->originClean())
-            canvas()->setOriginTainted();
-        if (canvasPattern->pattern()->isTextureBacked())
-            canvas()->disableDeferral(DisableDeferralReasonUsingTextureBackedPattern);
-        canvasStyle = CanvasStyle::createFromPattern(canvasPattern);
-    }
-
-    ASSERT(canvasStyle);
-    modifiableState().setFillStyle(canvasStyle);
-    modifiableState().setUnparsedFillColor(colorString);
-    modifiableState().clearResolvedFilter();
-}
-
-double CanvasRenderingContext2D::lineWidth() const
-{
-    return state().lineWidth();
-}
-
-void CanvasRenderingContext2D::setLineWidth(double width)
-{
-    if (!std::isfinite(width) || width <= 0)
-        return;
-    if (state().lineWidth() == width)
-        return;
-    modifiableState().setLineWidth(width);
-}
-
-String CanvasRenderingContext2D::lineCap() const
-{
-    return lineCapName(state().lineCap());
-}
-
-void CanvasRenderingContext2D::setLineCap(const String& s)
-{
-    LineCap cap;
-    if (!parseLineCap(s, cap))
-        return;
-    if (state().lineCap() == cap)
-        return;
-    modifiableState().setLineCap(cap);
-}
-
-String CanvasRenderingContext2D::lineJoin() const
-{
-    return lineJoinName(state().lineJoin());
-}
-
-void CanvasRenderingContext2D::setLineJoin(const String& s)
-{
-    LineJoin join;
-    if (!parseLineJoin(s, join))
-        return;
-    if (state().lineJoin() == join)
-        return;
-    modifiableState().setLineJoin(join);
-}
-
-double CanvasRenderingContext2D::miterLimit() const
-{
-    return state().miterLimit();
-}
-
-void CanvasRenderingContext2D::setMiterLimit(double limit)
-{
-    if (!std::isfinite(limit) || limit <= 0)
-        return;
-    if (state().miterLimit() == limit)
-        return;
-    modifiableState().setMiterLimit(limit);
-}
-
-double CanvasRenderingContext2D::shadowOffsetX() const
-{
-    return state().shadowOffset().width();
-}
-
-void CanvasRenderingContext2D::setShadowOffsetX(double x)
-{
-    if (!std::isfinite(x))
-        return;
-    if (state().shadowOffset().width() == x)
-        return;
-    modifiableState().setShadowOffsetX(x);
-}
-
-double CanvasRenderingContext2D::shadowOffsetY() const
-{
-    return state().shadowOffset().height();
-}
-
-void CanvasRenderingContext2D::setShadowOffsetY(double y)
-{
-    if (!std::isfinite(y))
-        return;
-    if (state().shadowOffset().height() == y)
-        return;
-    modifiableState().setShadowOffsetY(y);
-}
-
-double CanvasRenderingContext2D::shadowBlur() const
-{
-    return state().shadowBlur();
-}
-
-void CanvasRenderingContext2D::setShadowBlur(double blur)
-{
-    if (!std::isfinite(blur) || blur < 0)
-        return;
-    if (state().shadowBlur() == blur)
-        return;
-    modifiableState().setShadowBlur(blur);
-}
-
-String CanvasRenderingContext2D::shadowColor() const
-{
-    return Color(state().shadowColor()).serialized();
-}
-
-void CanvasRenderingContext2D::setShadowColor(const String& colorString)
-{
-    Color color;
-    if (!parseColorOrCurrentColor(color, colorString, canvas()))
-        return;
-    if (state().shadowColor() == color)
-        return;
-    modifiableState().setShadowColor(color.rgb());
-}
-
-const Vector<double>& CanvasRenderingContext2D::getLineDash() const
-{
-    return state().lineDash();
-}
-
-static bool lineDashSequenceIsValid(const Vector<double>& dash)
-{
-    for (size_t i = 0; i < dash.size(); i++) {
-        if (!std::isfinite(dash[i]) || dash[i] < 0)
-            return false;
-    }
-    return true;
-}
-
-void CanvasRenderingContext2D::setLineDash(const Vector<double>& dash)
-{
-    if (!lineDashSequenceIsValid(dash))
-        return;
-    modifiableState().setLineDash(dash);
-}
-
-double CanvasRenderingContext2D::lineDashOffset() const
-{
-    return state().lineDashOffset();
-}
-
-void CanvasRenderingContext2D::setLineDashOffset(double offset)
-{
-    if (!std::isfinite(offset) || state().lineDashOffset() == offset)
-        return;
-    modifiableState().setLineDashOffset(offset);
-}
-
-double CanvasRenderingContext2D::globalAlpha() const
-{
-    return state().globalAlpha();
-}
-
-void CanvasRenderingContext2D::setGlobalAlpha(double alpha)
-{
-    if (!(alpha >= 0 && alpha <= 1))
-        return;
-    if (state().globalAlpha() == alpha)
-        return;
-    modifiableState().setGlobalAlpha(alpha);
-}
-
-bool CanvasRenderingContext2D::shouldAntialias() const
-{
-    return state().shouldAntialias();
-}
-
 void CanvasRenderingContext2D::setShouldAntialias(bool doAA)
 {
     modifiableState().setShouldAntialias(doAA);
 }
 
-String CanvasRenderingContext2D::globalCompositeOperation() const
-{
-    return compositeOperatorName(compositeOperatorFromSkia(state().globalComposite()), blendModeFromSkia(state().globalComposite()));
-}
-
-void CanvasRenderingContext2D::setGlobalCompositeOperation(const String& operation)
-{
-    CompositeOperator op = CompositeSourceOver;
-    WebBlendMode blendMode = WebBlendModeNormal;
-    if (!parseCompositeAndBlendOperator(operation, op, blendMode))
-        return;
-    SkXfermode::Mode xfermode = WebCoreCompositeToSkiaComposite(op, blendMode);
-    if (state().globalComposite() == xfermode)
-        return;
-    modifiableState().setGlobalComposite(xfermode);
-}
-
-String CanvasRenderingContext2D::filter() const
-{
-    return state().unparsedFilter();
-}
-
-void CanvasRenderingContext2D::setFilter(const String& filterString)
-{
-    if (filterString == state().unparsedFilter())
-        return;
-
-    RefPtrWillBeRawPtr<CSSValue> filterValue = CSSParser::parseSingleValue(CSSPropertyWebkitFilter, filterString, CSSParserContext(HTMLStandardMode, 0));
-
-    if (!filterValue || filterValue->isInitialValue() || filterValue->isInheritedValue())
-        return;
-
-    modifiableState().setUnparsedFilter(filterString);
-    modifiableState().setFilter(filterValue.release());
-}
-
-PassRefPtrWillBeRawPtr<SVGMatrixTearOff> CanvasRenderingContext2D::currentTransform() const
-{
-    return SVGMatrixTearOff::create(state().transform());
-}
-
-void CanvasRenderingContext2D::setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff> passMatrixTearOff)
-{
-    RefPtrWillBeRawPtr<SVGMatrixTearOff> matrixTearOff = passMatrixTearOff;
-    const AffineTransform& transform = matrixTearOff->value();
-    setTransform(transform.a(), transform.b(), transform.c(), transform.d(), transform.e(), transform.f());
-}
-
-void CanvasRenderingContext2D::scale(double sx, double sy)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-
-    if (!std::isfinite(sx) || !std::isfinite(sy))
-        return;
-
-    AffineTransform newTransform = state().transform();
-    newTransform.scaleNonUniform(sx, sy);
-    if (state().transform() == newTransform)
-        return;
-
-    modifiableState().setTransform(newTransform);
-    if (!state().isTransformInvertible())
-        return;
-
-    c->scale(sx, sy);
-    m_path.transform(AffineTransform().scaleNonUniform(1.0 / sx, 1.0 / sy));
-}
-
-void CanvasRenderingContext2D::rotate(double angleInRadians)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-
-    if (!std::isfinite(angleInRadians))
-        return;
-
-    AffineTransform newTransform = state().transform();
-    newTransform.rotateRadians(angleInRadians);
-    if (state().transform() == newTransform)
-        return;
-
-    modifiableState().setTransform(newTransform);
-    if (!state().isTransformInvertible())
-        return;
-    c->rotate(angleInRadians * (180.0 / piFloat));
-    m_path.transform(AffineTransform().rotateRadians(-angleInRadians));
-}
-
-void CanvasRenderingContext2D::translate(double tx, double ty)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-    if (!state().isTransformInvertible())
-        return;
-
-    if (!std::isfinite(tx) || !std::isfinite(ty))
-        return;
-
-    AffineTransform newTransform = state().transform();
-    newTransform.translate(tx, ty);
-    if (state().transform() == newTransform)
-        return;
-
-    modifiableState().setTransform(newTransform);
-    if (!state().isTransformInvertible())
-        return;
-    c->translate(tx, ty);
-    m_path.transform(AffineTransform().translate(-tx, -ty));
-}
-
-void CanvasRenderingContext2D::transform(double m11, double m12, double m21, double m22, double dx, double dy)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-
-    if (!std::isfinite(m11) || !std::isfinite(m21) || !std::isfinite(dx) || !std::isfinite(m12) || !std::isfinite(m22) || !std::isfinite(dy))
-        return;
-
-    AffineTransform transform(m11, m12, m21, m22, dx, dy);
-    AffineTransform newTransform = state().transform() * transform;
-    if (state().transform() == newTransform)
-        return;
-
-    modifiableState().setTransform(newTransform);
-    if (!state().isTransformInvertible())
-        return;
-
-    c->concat(affineTransformToSkMatrix(transform));
-    m_path.transform(transform.inverse());
-}
-
-void CanvasRenderingContext2D::resetTransform()
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-
-    AffineTransform ctm = state().transform();
-    bool invertibleCTM = state().isTransformInvertible();
-    // It is possible that CTM is identity while CTM is not invertible.
-    // When CTM becomes non-invertible, realizeSaves() can make CTM identity.
-    if (ctm.isIdentity() && invertibleCTM)
-        return;
-
-    // resetTransform() resolves the non-invertible CTM state.
-    modifiableState().resetTransform();
-    c->setMatrix(affineTransformToSkMatrix(canvas()->baseTransform()));
-
-    if (invertibleCTM)
-        m_path.transform(ctm);
-    // When else, do nothing because all transform methods didn't update m_path when CTM became non-invertible.
-    // It means that resetTransform() restores m_path just before CTM became non-invertible.
-}
-
-void CanvasRenderingContext2D::setTransform(double m11, double m12, double m21, double m22, double dx, double dy)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-
-    if (!std::isfinite(m11) || !std::isfinite(m21) || !std::isfinite(dx) || !std::isfinite(m12) || !std::isfinite(m22) || !std::isfinite(dy))
-        return;
-
-    resetTransform();
-    transform(m11, m12, m21, m22, dx, dy);
-}
-
-void CanvasRenderingContext2D::beginPath()
-{
-    m_path.clear();
-}
-
-static bool validateRectForCanvas(double& x, double& y, double& width, double& height)
-{
-    if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(width) || !std::isfinite(height))
-        return false;
-
-    if (!width && !height)
-        return false;
-
-    if (width < 0) {
-        width = -width;
-        x -= width;
-    }
-
-    if (height < 0) {
-        height = -height;
-        y -= height;
-    }
-
-    return true;
-}
-
-static bool isFullCanvasCompositeMode(SkXfermode::Mode op)
-{
-    // See 4.8.11.1.3 Compositing
-    // CompositeSourceAtop and CompositeDestinationOut are not listed here as the platforms already
-    // implement the specification's behavior.
-    return op == SkXfermode::kSrcIn_Mode || op == SkXfermode::kSrcOut_Mode || op == SkXfermode::kDstIn_Mode || op == SkXfermode::kDstATop_Mode;
-}
-
-template<typename DrawFunc>
-void CanvasRenderingContext2D::compositedDraw(const DrawFunc& drawFunc, SkCanvas* c, CanvasRenderingContext2DState::PaintType paintType, CanvasRenderingContext2DState::ImageType imageType)
-{
-    SkImageFilter* filter = state().getFilter(canvas(), accessFont(), canvas()->size(), this);
-    ASSERT(isFullCanvasCompositeMode(state().globalComposite()) || filter);
-    SkMatrix ctm = c->getTotalMatrix();
-    c->resetMatrix();
-    SkPaint compositePaint;
-    compositePaint.setXfermodeMode(state().globalComposite());
-    if (state().shouldDrawShadows()) {
-        // unroll into two independently composited passes if drawing shadows
-        SkPaint shadowPaint = *state().getPaint(paintType, DrawShadowOnly, imageType);
-        int saveCount = c->getSaveCount();
-        if (filter) {
-            SkPaint filterPaint;
-            filterPaint.setImageFilter(filter);
-            // TODO(junov): crbug.com/502921 We could use primitive bounds if we knew that the filter
-            // does not affect transparent black regions.
-            c->saveLayer(nullptr, &shadowPaint);
-            c->saveLayer(nullptr, &filterPaint);
-            SkPaint foregroundPaint = *state().getPaint(paintType, DrawForegroundOnly, imageType);
-            c->setMatrix(ctm);
-            drawFunc(c, &foregroundPaint);
-        } else {
-            ASSERT(isFullCanvasCompositeMode(state().globalComposite()));
-            c->saveLayer(nullptr, &compositePaint);
-            shadowPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
-            c->setMatrix(ctm);
-            drawFunc(c, &shadowPaint);
-        }
-        c->restoreToCount(saveCount);
-    }
-
-    compositePaint.setImageFilter(filter);
-    // TODO(junov): crbug.com/502921 We could use primitive bounds if we knew that the filter
-    // does not affect transparent black regions *and* !isFullCanvasCompositeMode
-    c->saveLayer(nullptr, &compositePaint);
-    SkPaint foregroundPaint = *state().getPaint(paintType, DrawForegroundOnly, imageType);
-    foregroundPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
-    c->setMatrix(ctm);
-    drawFunc(c, &foregroundPaint);
-    c->restore();
-    c->setMatrix(ctm);
-}
-
-template<typename DrawFunc, typename ContainsFunc>
-bool CanvasRenderingContext2D::draw(const DrawFunc& drawFunc, const ContainsFunc& drawCoversClipBounds, const SkRect& bounds, CanvasRenderingContext2DState::PaintType paintType, CanvasRenderingContext2DState::ImageType imageType)
-{
-    if (!state().isTransformInvertible())
-        return false;
-
-    SkIRect clipBounds;
-    if (!drawingCanvas() || !drawingCanvas()->getClipDeviceBounds(&clipBounds))
-        return false;
-
-    // If gradient size is zero, then paint nothing.
-    CanvasStyle* style = state().style(paintType);
-    if (style) {
-        CanvasGradient* gradient = style->canvasGradient();
-        if (gradient && gradient->gradient()->isZeroSize())
-            return false;
-    }
-
-    if (isFullCanvasCompositeMode(state().globalComposite()) || state().hasFilter(canvas(), accessFont(), canvas()->size(), this)) {
-        compositedDraw(drawFunc, drawingCanvas(), paintType, imageType);
-        didDraw(clipBounds);
-    } else if (state().globalComposite() == SkXfermode::kSrc_Mode) {
-        clearCanvas(); // takes care of checkOverdraw()
-        const SkPaint* paint = state().getPaint(paintType, DrawForegroundOnly, imageType);
-        drawFunc(drawingCanvas(), paint);
-        didDraw(clipBounds);
-    } else {
-        SkIRect dirtyRect;
-        if (computeDirtyRect(bounds, clipBounds, &dirtyRect)) {
-            const SkPaint* paint = state().getPaint(paintType, DrawShadowAndForeground, imageType);
-            if (paintType != CanvasRenderingContext2DState::StrokePaintType && drawCoversClipBounds(clipBounds))
-                checkOverdraw(bounds, paint, imageType, ClipFill);
-            drawFunc(drawingCanvas(), paint);
-            didDraw(dirtyRect);
-        }
-    }
-    return true;
-}
-
-static bool isPathExpensive(const Path& path)
-{
-    const SkPath& skPath = path.skPath();
-    if (ExpensiveCanvasHeuristicParameters::ConcavePathsAreExpensive && !skPath.isConvex())
-        return true;
-
-    if (skPath.countPoints() > ExpensiveCanvasHeuristicParameters::ExpensivePathPointCount)
-        return true;
-
-    return false;
-}
-
-void CanvasRenderingContext2D::drawPathInternal(const Path& path, CanvasRenderingContext2DState::PaintType paintType, SkPath::FillType fillType)
-{
-    if (path.isEmpty())
-        return;
-
-    SkPath skPath = path.skPath();
-    FloatRect bounds = path.boundingRect();
-    skPath.setFillType(fillType);
-
-    if (paintType == CanvasRenderingContext2DState::StrokePaintType)
-        inflateStrokeRect(bounds);
-
-    if (!drawingCanvas())
-        return;
-
-    if (draw(
-        [&skPath, this](SkCanvas* c, const SkPaint* paint) // draw lambda
-        {
-            c->drawPath(skPath, *paint);
-        },
-        [](const SkIRect& rect) // overdraw test lambda
-        {
-            return false;
-        }, bounds, paintType)) {
-        if (isPathExpensive(path)) {
-            ImageBuffer* buffer = canvas()->buffer();
-            if (buffer)
-                buffer->setHasExpensiveOp();
-        }
-    }
-}
-
-static SkPath::FillType parseWinding(const String& windingRuleString)
-{
-    if (windingRuleString == "nonzero")
-        return SkPath::kWinding_FillType;
-    if (windingRuleString == "evenodd")
-        return SkPath::kEvenOdd_FillType;
-
-    ASSERT_NOT_REACHED();
-    return SkPath::kEvenOdd_FillType;
-}
-
-void CanvasRenderingContext2D::fill(const String& windingRuleString)
-{
-    drawPathInternal(m_path, CanvasRenderingContext2DState::FillPaintType, parseWinding(windingRuleString));
-}
-
-void CanvasRenderingContext2D::fill(Path2D* domPath, const String& windingRuleString)
-{
-    drawPathInternal(domPath->path(), CanvasRenderingContext2DState::FillPaintType, parseWinding(windingRuleString));
-}
-
-void CanvasRenderingContext2D::stroke()
-{
-    drawPathInternal(m_path, CanvasRenderingContext2DState::StrokePaintType);
-}
-
-void CanvasRenderingContext2D::stroke(Path2D* domPath)
-{
-    drawPathInternal(domPath->path(), CanvasRenderingContext2DState::StrokePaintType);
-}
-
-void CanvasRenderingContext2D::fillRect(double x, double y, double width, double height)
-{
-    if (!validateRectForCanvas(x, y, width, height))
-        return;
-
-    if (!drawingCanvas())
-        return;
-
-    SkRect rect = SkRect::MakeXYWH(x, y, width, height);
-    draw(
-        [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
-        {
-            c->drawRect(rect, *paint);
-        },
-        [&rect, this](const SkIRect& clipBounds) // overdraw test lambda
-        {
-            return rectContainsTransformedRect(rect, clipBounds);
-        }, rect, CanvasRenderingContext2DState::FillPaintType);
-}
-
-static void strokeRectOnCanvas(const FloatRect& rect, SkCanvas* canvas, const SkPaint* paint)
-{
-    ASSERT(paint->getStyle() == SkPaint::kStroke_Style);
-    if ((rect.width() > 0) != (rect.height() > 0)) {
-        // When stroking, we must skip the zero-dimension segments
-        SkPath path;
-        path.moveTo(rect.x(), rect.y());
-        path.lineTo(rect.maxX(), rect.maxY());
-        path.close();
-        canvas->drawPath(path, *paint);
-        return;
-    }
-    canvas->drawRect(rect, *paint);
-}
-
-void CanvasRenderingContext2D::strokeRect(double x, double y, double width, double height)
-{
-    if (!validateRectForCanvas(x, y, width, height))
-        return;
-
-    if (!drawingCanvas())
-        return;
-
-    SkRect rect = SkRect::MakeXYWH(x, y, width, height);
-    FloatRect bounds = rect;
-    inflateStrokeRect(bounds);
-    draw(
-        [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
-        {
-            strokeRectOnCanvas(rect, c, paint);
-        },
-        [](const SkIRect& clipBounds) // overdraw test lambda
-        {
-            return false;
-        }, bounds, CanvasRenderingContext2DState::StrokePaintType);
-}
-
-void CanvasRenderingContext2D::clipInternal(const Path& path, const String& windingRuleString)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c) {
-        return;
-    }
-    if (!state().isTransformInvertible()) {
-        return;
-    }
-
-    SkPath skPath = path.skPath();
-    skPath.setFillType(parseWinding(windingRuleString));
-    modifiableState().clipPath(skPath, m_clipAntialiasing);
-    c->clipPath(skPath, SkRegion::kIntersect_Op, m_clipAntialiasing == AntiAliased);
-    if (ExpensiveCanvasHeuristicParameters::ComplexClipsAreExpensive && !skPath.isRect(0) && canvas()->hasImageBuffer()) {
-        canvas()->buffer()->setHasExpensiveOp();
-    }
-}
-
-void CanvasRenderingContext2D::clip(const String& windingRuleString)
-{
-    clipInternal(m_path, windingRuleString);
-}
-
-void CanvasRenderingContext2D::clip(Path2D* domPath, const String& windingRuleString)
-{
-    clipInternal(domPath->path(), windingRuleString);
-}
-
-bool CanvasRenderingContext2D::isPointInPath(const double x, const double y, const String& windingRuleString)
-{
-    return isPointInPathInternal(m_path, x, y, windingRuleString);
-}
-
-bool CanvasRenderingContext2D::isPointInPath(Path2D* domPath, const double x, const double y, const String& windingRuleString)
-{
-    return isPointInPathInternal(domPath->path(), x, y, windingRuleString);
-}
-
-bool CanvasRenderingContext2D::isPointInPathInternal(const Path& path, const double x, const double y, const String& windingRuleString)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return false;
-    if (!state().isTransformInvertible())
-        return false;
-
-    FloatPoint point(x, y);
-    if (!std::isfinite(point.x()) || !std::isfinite(point.y()))
-        return false;
-    AffineTransform ctm = state().transform();
-    FloatPoint transformedPoint = ctm.inverse().mapPoint(point);
-
-    return path.contains(transformedPoint, SkFillTypeToWindRule(parseWinding(windingRuleString)));
-}
-
-bool CanvasRenderingContext2D::isPointInStroke(const double x, const double y)
-{
-    return isPointInStrokeInternal(m_path, x, y);
-}
-
-bool CanvasRenderingContext2D::isPointInStroke(Path2D* domPath, const double x, const double y)
-{
-    return isPointInStrokeInternal(domPath->path(), x, y);
-}
-
-bool CanvasRenderingContext2D::isPointInStrokeInternal(const Path& path, const double x, const double y)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return false;
-    if (!state().isTransformInvertible())
-        return false;
-
-    FloatPoint point(x, y);
-    if (!std::isfinite(point.x()) || !std::isfinite(point.y()))
-        return false;
-    AffineTransform ctm = state().transform();
-    FloatPoint transformedPoint = ctm.inverse().mapPoint(point);
-
-    StrokeData strokeData;
-    strokeData.setThickness(state().lineWidth());
-    strokeData.setLineCap(state().lineCap());
-    strokeData.setLineJoin(state().lineJoin());
-    strokeData.setMiterLimit(state().miterLimit());
-    Vector<float> lineDash(state().lineDash().size());
-    std::copy(state().lineDash().begin(), state().lineDash().end(), lineDash.begin());
-    strokeData.setLineDash(lineDash, state().lineDashOffset());
-    return path.strokeContains(transformedPoint, strokeData);
-}
-
 void CanvasRenderingContext2D::scrollPathIntoView()
 {
     scrollPathIntoViewInternal(m_path);
@@ -1187,370 +348,14 @@
 
 void CanvasRenderingContext2D::clearRect(double x, double y, double width, double height)
 {
-    if (!validateRectForCanvas(x, y, width, height))
-        return;
-
-    SkCanvas* c = drawingCanvas();
-    if (!c)
-        return;
-    if (!state().isTransformInvertible())
-        return;
-
-    SkIRect clipBounds;
-    if (!c->getClipDeviceBounds(&clipBounds))
-        return;
-
-    SkPaint clearPaint;
-    clearPaint.setXfermodeMode(SkXfermode::kClear_Mode);
-    clearPaint.setStyle(SkPaint::kFill_Style);
+    BaseRenderingContext2D::clearRect(x, y, width, height);
     FloatRect rect(x, y, width, height);
 
-    if (rectContainsTransformedRect(rect, clipBounds)) {
-        checkOverdraw(rect, &clearPaint, CanvasRenderingContext2DState::NoImage, ClipFill);
-        if (drawingCanvas())
-            drawingCanvas()->drawRect(rect, clearPaint);
-        didDraw(clipBounds);
-    } else {
-        SkIRect dirtyRect;
-        if (computeDirtyRect(rect, clipBounds, &dirtyRect)) {
-            c->drawRect(rect, clearPaint);
-            didDraw(dirtyRect);
-        }
-    }
-
     if (m_hitRegionManager) {
         m_hitRegionManager->removeHitRegionsInRect(rect, state().transform());
     }
 }
 
-static inline FloatRect normalizeRect(const FloatRect& rect)
-{
-    return FloatRect(std::min(rect.x(), rect.maxX()),
-        std::min(rect.y(), rect.maxY()),
-        std::max(rect.width(), -rect.width()),
-        std::max(rect.height(), -rect.height()));
-}
-
-static inline void clipRectsToImageRect(const FloatRect& imageRect, FloatRect* srcRect, FloatRect* dstRect)
-{
-    if (imageRect.contains(*srcRect))
-        return;
-
-    // Compute the src to dst transform
-    FloatSize scale(dstRect->size().width() / srcRect->size().width(), dstRect->size().height() / srcRect->size().height());
-    FloatPoint scaledSrcLocation = srcRect->location();
-    scaledSrcLocation.scale(scale.width(), scale.height());
-    FloatSize offset = dstRect->location() - scaledSrcLocation;
-
-    srcRect->intersect(imageRect);
-
-    // To clip the destination rectangle in the same proportion, transform the clipped src rect
-    *dstRect = *srcRect;
-    dstRect->scale(scale.width(), scale.height());
-    dstRect->move(offset);
-}
-
-static inline CanvasImageSource* toImageSourceInternal(const CanvasImageSourceUnion& value)
-{
-    if (value.isHTMLImageElement())
-        return value.getAsHTMLImageElement().get();
-    if (value.isHTMLVideoElement())
-        return value.getAsHTMLVideoElement().get();
-    if (value.isHTMLCanvasElement())
-        return value.getAsHTMLCanvasElement().get();
-    if (value.isImageBitmap())
-        return value.getAsImageBitmap().get();
-    ASSERT_NOT_REACHED();
-    return nullptr;
-}
-
-void CanvasRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource, double x, double y, ExceptionState& exceptionState)
-{
-    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
-    FloatSize sourceRectSize = imageSourceInternal->elementSize();
-    FloatSize destRectSize = imageSourceInternal->defaultDestinationSize();
-    drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, destRectSize.width(), destRectSize.height(), exceptionState);
-}
-
-void CanvasRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource,
-    double x, double y, double width, double height, ExceptionState& exceptionState)
-{
-    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
-    FloatSize sourceRectSize = imageSourceInternal->elementSize();
-    drawImage(imageSourceInternal, 0, 0, sourceRectSize.width(), sourceRectSize.height(), x, y, width, height, exceptionState);
-}
-
-void CanvasRenderingContext2D::drawImage(const CanvasImageSourceUnion& imageSource,
-    double sx, double sy, double sw, double sh,
-    double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
-{
-    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
-    drawImage(imageSourceInternal, sx, sy, sw, sh, dx, dy, dw, dh, exceptionState);
-}
-
-bool CanvasRenderingContext2D::shouldDrawImageAntialiased(const FloatRect& destRect) const
-{
-    if (!shouldAntialias())
-        return false;
-    SkCanvas* c = drawingCanvas();
-    ASSERT(c);
-
-    const SkMatrix &ctm = c->getTotalMatrix();
-    // Don't disable anti-aliasing if we're rotated or skewed.
-    if (!ctm.rectStaysRect())
-        return true;
-    // Check if the dimensions of the destination are "small" (less than one
-    // device pixel). To prevent sudden drop-outs. Since we know that
-    // kRectStaysRect_Mask is set, the matrix either has scale and no skew or
-    // vice versa. We can query the kAffine_Mask flag to determine which case
-    // it is.
-    // FIXME: This queries the CTM while drawing, which is generally
-    // discouraged. Always drawing with AA can negatively impact performance
-    // though - that's why it's not always on.
-    SkScalar widthExpansion, heightExpansion;
-    if (ctm.getType() & SkMatrix::kAffine_Mask)
-        widthExpansion = ctm[SkMatrix::kMSkewY], heightExpansion = ctm[SkMatrix::kMSkewX];
-    else
-        widthExpansion = ctm[SkMatrix::kMScaleX], heightExpansion = ctm[SkMatrix::kMScaleY];
-    return destRect.width() * fabs(widthExpansion) < 1 || destRect.height() * fabs(heightExpansion) < 1;
-}
-
-void CanvasRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* imageSource, Image* image, const FloatRect& srcRect, const FloatRect& dstRect, const SkPaint* paint)
-{
-    int initialSaveCount = c->getSaveCount();
-    SkPaint imagePaint = *paint;
-
-    if (paint->getImageFilter()) {
-        SkMatrix invCtm;
-        if (!c->getTotalMatrix().invert(&invCtm)) {
-            // There is an earlier check for invertibility, but the arithmetic
-            // in AffineTransform is not exactly identical, so it is possible
-            // for SkMatrix to find the transform to be non-invertible at this stage.
-            // crbug.com/504687
-            return;
-        }
-        SkRect bounds = dstRect;
-        SkPaint layerPaint;
-        layerPaint.setXfermode(paint->getXfermode());
-        SkAutoTUnref<SkImageFilter> localFilter(paint->getImageFilter()->newWithLocalMatrix(invCtm));
-        layerPaint.setImageFilter(localFilter);
-        c->saveLayer(&bounds, &layerPaint);
-        imagePaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
-        imagePaint.setImageFilter(nullptr);
-    }
-
-    if (!imageSource->isVideoElement()) {
-        imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect));
-        image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientation, Image::DoNotClampImageToSourceRect);
-    } else {
-        c->save();
-        c->clipRect(dstRect);
-        c->translate(dstRect.x(), dstRect.y());
-        c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.height());
-        c->translate(-srcRect.x(), -srcRect.y());
-        HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource);
-        video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidth(), video->videoHeight())), &imagePaint);
-    }
-
-    c->restoreToCount(initialSaveCount);
-}
-
-bool shouldDisableDeferral(CanvasImageSource* imageSource, DisableDeferralReason* reason)
-{
-    ASSERT(reason);
-    ASSERT(*reason == DisableDeferralReasonUnknown);
-
-    if (imageSource->isVideoElement()) {
-        *reason = DisableDeferralReasonDrawImageOfVideo;
-        return true;
-    }
-    if (imageSource->isCanvasElement()) {
-        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(imageSource);
-        if (canvas->isAnimated2D()) {
-            *reason = DisableDeferralReasonDrawImageOfAnimated2dCanvas;
-            return true;
-        }
-    }
-    return false;
-}
-
-void CanvasRenderingContext2D::drawImage(CanvasImageSource* imageSource,
-    double sx, double sy, double sw, double sh,
-    double dx, double dy, double dw, double dh, ExceptionState& exceptionState)
-{
-    if (!drawingCanvas())
-        return;
-
-    RefPtr<Image> image;
-    SourceImageStatus sourceImageStatus = InvalidSourceImageStatus;
-    if (!imageSource->isVideoElement()) {
-        AccelerationHint hint = canvas()->buffer()->isAccelerated() ? PreferAcceleration : PreferNoAcceleration;
-        image = imageSource->getSourceImageForCanvas(&sourceImageStatus, hint, SnapshotReasonDrawImage);
-        if (sourceImageStatus == UndecodableSourceImageStatus)
-            exceptionState.throwDOMException(InvalidStateError, "The HTMLImageElement provided is in the 'broken' state.");
-        if (!image || !image->width() || !image->height())
-            return;
-    } else {
-        if (!static_cast<HTMLVideoElement*>(imageSource)->hasAvailableVideoFrame())
-            return;
-    }
-
-    if (!std::isfinite(dx) || !std::isfinite(dy) || !std::isfinite(dw) || !std::isfinite(dh)
-        || !std::isfinite(sx) || !std::isfinite(sy) || !std::isfinite(sw) || !std::isfinite(sh)
-        || !dw || !dh || !sw || !sh)
-        return;
-
-    FloatRect srcRect = normalizeRect(FloatRect(sx, sy, sw, sh));
-    FloatRect dstRect = normalizeRect(FloatRect(dx, dy, dw, dh));
-
-    clipRectsToImageRect(FloatRect(FloatPoint(), imageSource->elementSize()), &srcRect, &dstRect);
-
-    imageSource->adjustDrawRects(&srcRect, &dstRect);
-
-    if (srcRect.isEmpty())
-        return;
-
-    DisableDeferralReason reason = DisableDeferralReasonUnknown;
-    if (shouldDisableDeferral(imageSource, &reason) || image->isTextureBacked())
-        canvas()->disableDeferral(reason);
-
-    validateStateStack();
-
-    draw(
-        [this, &imageSource, &image, &srcRect, dstRect](SkCanvas* c, const SkPaint* paint) // draw lambda
-        {
-            drawImageInternal(c, imageSource, image.get(), srcRect, dstRect, paint);
-        },
-        [this, &dstRect](const SkIRect& clipBounds) // overdraw test lambda
-        {
-            return rectContainsTransformedRect(dstRect, clipBounds);
-        }, dstRect, CanvasRenderingContext2DState::ImagePaintType,
-        imageSource->isOpaque() ? CanvasRenderingContext2DState::OpaqueImage : CanvasRenderingContext2DState::NonOpaqueImage);
-
-    validateStateStack();
-
-    bool isExpensive = false;
-
-    if (ExpensiveCanvasHeuristicParameters::SVGImageSourcesAreExpensive && imageSource->isSVGSource())
-        isExpensive = true;
-
-    if (imageSource->elementSize().width() * imageSource->elementSize().height() > canvas()->width() * canvas()->height() * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio)
-        isExpensive = true;
-
-    if (isExpensive) {
-        ImageBuffer* buffer = canvas()->buffer();
-        if (buffer)
-            buffer->setHasExpensiveOp();
-    }
-
-    if (imageSource->isCanvasElement() && static_cast<HTMLCanvasElement*>(imageSource)->is3D()) {
-        // WebGL to 2D canvas: must flush graphics context to prevent a race
-        // FIXME: crbug.com/516331 Fix the underlying synchronization issue so this flush can be eliminated.
-        canvas()->buffer()->flushGpu(FlushReasonDrawImageOfWebGL);
-    }
-
-    if (canvas()->originClean() && wouldTaintOrigin(imageSource))
-        canvas()->setOriginTainted();
-}
-
-void CanvasRenderingContext2D::clearCanvas()
-{
-    FloatRect canvasRect(0, 0, canvas()->width(), canvas()->height());
-    checkOverdraw(canvasRect, 0, CanvasRenderingContext2DState::NoImage, ClipFill);
-    SkCanvas* c = drawingCanvas();
-    if (c)
-        c->clear(m_hasAlpha ? SK_ColorTRANSPARENT : SK_ColorBLACK);
-}
-
-bool CanvasRenderingContext2D::rectContainsTransformedRect(const FloatRect& rect, const SkIRect& transformedRect) const
-{
-    FloatQuad quad(rect);
-    FloatQuad transformedQuad(FloatRect(transformedRect.x(), transformedRect.y(), transformedRect.width(), transformedRect.height()));
-    return state().transform().mapQuad(quad).containsQuad(transformedQuad);
-}
-
-CanvasGradient* CanvasRenderingContext2D::createLinearGradient(double x0, double y0, double x1, double y1)
-{
-    CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatPoint(x1, y1));
-    return gradient;
-}
-
-CanvasGradient* CanvasRenderingContext2D::createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState& exceptionState)
-{
-    if (r0 < 0 || r1 < 0) {
-        exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
-        return nullptr;
-    }
-
-    CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, FloatPoint(x1, y1), r1);
-    return gradient;
-}
-
-CanvasPattern* CanvasRenderingContext2D::createPattern(const CanvasImageSourceUnion& imageSource, const String& repetitionType, ExceptionState& exceptionState)
-{
-    Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetitionType, exceptionState);
-    if (exceptionState.hadException())
-        return nullptr;
-
-    SourceImageStatus status;
-    CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
-    RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanvas(&status, PreferNoAcceleration, SnapshotReasonCreatePattern);
-
-    switch (status) {
-    case NormalSourceImageStatus:
-        break;
-    case ZeroSizeCanvasSourceImageStatus:
-        exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize().width() ? "height" : "width"));
-        return nullptr;
-    case UndecodableSourceImageStatus:
-        exceptionState.throwDOMException(InvalidStateError, "Source image is in the 'broken' state.");
-        return nullptr;
-    case InvalidSourceImageStatus:
-        imageForRendering = Image::nullImage();
-        break;
-    case IncompleteSourceImageStatus:
-        return nullptr;
-    default:
-        ASSERT_NOT_REACHED();
-        return nullptr;
-    }
-    ASSERT(imageForRendering);
-
-    bool originClean = !wouldTaintOrigin(imageSourceInternal);
-
-    return CanvasPattern::create(imageForRendering.release(), repeatMode, originClean);
-}
-
-bool CanvasRenderingContext2D::computeDirtyRect(const FloatRect& localRect, SkIRect* dirtyRect)
-{
-    SkIRect clipBounds;
-    if (!drawingCanvas()->getClipDeviceBounds(&clipBounds))
-        return false;
-    return computeDirtyRect(localRect, clipBounds, dirtyRect);
-}
-
-bool CanvasRenderingContext2D::computeDirtyRect(const FloatRect& localRect, const SkIRect& transformedClipBounds, SkIRect* dirtyRect)
-{
-    FloatRect canvasRect = state().transform().mapRect(localRect);
-
-    if (alphaChannel(state().shadowColor())) {
-        FloatRect shadowRect(canvasRect);
-        shadowRect.move(state().shadowOffset());
-        shadowRect.inflate(state().shadowBlur());
-        canvasRect.unite(shadowRect);
-    }
-
-    SkIRect canvasIRect;
-    static_cast<SkRect>(canvasRect).roundOut(&canvasIRect);
-    if (!canvasIRect.intersect(transformedClipBounds))
-        return false;
-
-    if (dirtyRect)
-        *dirtyRect = canvasIRect;
-
-    return true;
-}
-
 void CanvasRenderingContext2D::didDraw(const SkIRect& dirtyRect)
 {
     if (dirtyRect.isEmpty())
@@ -1565,6 +370,16 @@
     canvas()->didDraw(SkRect::Make(dirtyRect));
 }
 
+bool CanvasRenderingContext2D::stateHasFilter()
+{
+    return state().hasFilter(canvas(), accessFont(), canvas()->size(), this);
+}
+
+SkImageFilter* CanvasRenderingContext2D::stateGetFilter()
+{
+    return state().getFilter(canvas(), accessFont(), canvas()->size(), this);
+}
+
 SkCanvas* CanvasRenderingContext2D::drawingCanvas() const
 {
     if (isContextLost())
@@ -1572,114 +387,19 @@
     return canvas()->drawingCanvas();
 }
 
-ImageData* CanvasRenderingContext2D::createImageData(ImageData* imageData) const
+SkCanvas* CanvasRenderingContext2D::existingDrawingCanvas() const
 {
-    return ImageData::create(imageData->size());
+    return canvas()->existingDrawingCanvas();
 }
 
-ImageData* CanvasRenderingContext2D::createImageData(double sw, double sh, ExceptionState& exceptionState) const
+void CanvasRenderingContext2D::disableDeferral(DisableDeferralReason reason)
 {
-    if (!sw || !sh) {
-        exceptionState.throwDOMException(IndexSizeError, String::format("The source %s is 0.", sw ? "height" : "width"));
-        return nullptr;
-    }
-
-    FloatSize logicalSize(fabs(sw), fabs(sh));
-    if (!logicalSize.isExpressibleAsIntSize())
-        return nullptr;
-
-    IntSize size = expandedIntSize(logicalSize);
-    if (size.width() < 1)
-        size.setWidth(1);
-    if (size.height() < 1)
-        size.setHeight(1);
-
-    return ImageData::create(size);
+    canvas()->disableDeferral(reason);
 }
 
-ImageData* CanvasRenderingContext2D::getImageData(double sx, double sy, double sw, double sh, ExceptionState& exceptionState) const
+AffineTransform CanvasRenderingContext2D::baseTransform() const
 {
-    if (!canvas()->originClean())
-        exceptionState.throwSecurityError("The canvas has been tainted by cross-origin data.");
-    else if (!sw || !sh)
-        exceptionState.throwDOMException(IndexSizeError, String::format("The source %s is 0.", sw ? "height" : "width"));
-
-    if (exceptionState.hadException())
-        return nullptr;
-
-    if (sw < 0) {
-        sx += sw;
-        sw = -sw;
-    }
-    if (sh < 0) {
-        sy += sh;
-        sh = -sh;
-    }
-
-    FloatRect logicalRect(sx, sy, sw, sh);
-    if (logicalRect.width() < 1)
-        logicalRect.setWidth(1);
-    if (logicalRect.height() < 1)
-        logicalRect.setHeight(1);
-    if (!logicalRect.isExpressibleAsIntRect())
-        return nullptr;
-
-    IntRect imageDataRect = enclosingIntRect(logicalRect);
-    ImageBuffer* buffer = canvas()->buffer();
-    if (!buffer || isContextLost())
-        return ImageData::create(imageDataRect.size());
-
-    WTF::ArrayBufferContents contents;
-    if (!buffer->getImageData(Unmultiplied, imageDataRect, contents))
-        return nullptr;
-
-    RefPtr<DOMArrayBuffer> arrayBuffer = DOMArrayBuffer::create(contents);
-    return ImageData::create(
-        imageDataRect.size(),
-        DOMUint8ClampedArray::create(arrayBuffer, 0, arrayBuffer->byteLength()));
-}
-
-void CanvasRenderingContext2D::putImageData(ImageData* data, double dx, double dy, ExceptionState& exceptionState)
-{
-    putImageData(data, dx, dy, 0, 0, data->width(), data->height(), exceptionState);
-}
-
-void CanvasRenderingContext2D::putImageData(ImageData* data, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight, ExceptionState& exceptionState)
-{
-    if (data->data()->bufferBase()->isNeutered()) {
-        exceptionState.throwDOMException(InvalidStateError, "The source data has been neutered.");
-        return;
-    }
-    ImageBuffer* buffer = canvas()->buffer();
-    if (!buffer)
-        return;
-
-    if (dirtyWidth < 0) {
-        dirtyX += dirtyWidth;
-        dirtyWidth = -dirtyWidth;
-    }
-
-    if (dirtyHeight < 0) {
-        dirtyY += dirtyHeight;
-        dirtyHeight = -dirtyHeight;
-    }
-
-    FloatRect clipRect(dirtyX, dirtyY, dirtyWidth, dirtyHeight);
-    clipRect.intersect(IntRect(0, 0, data->width(), data->height()));
-    IntSize destOffset(static_cast<int>(dx), static_cast<int>(dy));
-    IntRect destRect = enclosingIntRect(clipRect);
-    destRect.move(destOffset);
-    destRect.intersect(IntRect(IntPoint(), buffer->size()));
-    if (destRect.isEmpty())
-        return;
-    IntRect sourceRect(destRect);
-    sourceRect.move(-destOffset);
-
-    checkOverdraw(destRect, 0, CanvasRenderingContext2DState::NoImage, UntransformedUnclippedFill);
-
-    buffer->putByteArray(Unmultiplied, data->data()->data(), IntSize(data->width(), data->height()), sourceRect, IntPoint(destOffset));
-
-    didDraw(destRect);
+    return canvas()->baseTransform();
 }
 
 String CanvasRenderingContext2D::font() const
@@ -1823,6 +543,41 @@
     state().clearResolvedFilter();
 }
 
+bool CanvasRenderingContext2D::originClean() const
+{
+    return canvas()->originClean();
+}
+
+void CanvasRenderingContext2D::setOriginTainted()
+{
+    return canvas()->setOriginTainted();
+}
+
+int CanvasRenderingContext2D::width() const
+{
+    return canvas()->width();
+}
+
+int CanvasRenderingContext2D::height() const
+{
+    return canvas()->height();
+}
+
+bool CanvasRenderingContext2D::hasImageBuffer() const
+{
+    return canvas()->hasImageBuffer();
+}
+
+ImageBuffer* CanvasRenderingContext2D::imageBuffer() const
+{
+    return canvas()->buffer();
+}
+
+bool CanvasRenderingContext2D::parseColorOrCurrentColor(Color& color, const String& colorString) const
+{
+    return ::blink::parseColorOrCurrentColor(color, colorString, canvas());
+}
+
 String CanvasRenderingContext2D::textAlign() const
 {
     return textAlignName(state().textAlign());
@@ -2058,21 +813,6 @@
         textRunPaintInfo.bounds, paintType);
 }
 
-void CanvasRenderingContext2D::inflateStrokeRect(FloatRect& rect) const
-{
-    // Fast approximation of the stroke's bounding rect.
-    // This yields a slightly oversized rect but is very fast
-    // compared to Path::strokeBoundingRect().
-    static const double root2 = sqrtf(2);
-    double delta = state().lineWidth() / 2;
-    if (state().lineJoin() == MiterJoin)
-        delta *= state().miterLimit();
-    else if (state().lineCap() == SquareCap)
-        delta *= root2;
-
-    rect.inflate(delta);
-}
-
 const Font& CanvasRenderingContext2D::accessFont()
 {
     if (!state().hasRealizedFont())
@@ -2122,32 +862,6 @@
     return canvas()->buffer() ? canvas()->buffer()->platformLayer() : 0;
 }
 
-bool CanvasRenderingContext2D::imageSmoothingEnabled() const
-{
-    return state().imageSmoothingEnabled();
-}
-
-void CanvasRenderingContext2D::setImageSmoothingEnabled(bool enabled)
-{
-    if (enabled == state().imageSmoothingEnabled())
-        return;
-
-    modifiableState().setImageSmoothingEnabled(enabled);
-}
-
-String CanvasRenderingContext2D::imageSmoothingQuality() const
-{
-    return state().imageSmoothingQuality();
-}
-
-void CanvasRenderingContext2D::setImageSmoothingQuality(const String& quality)
-{
-    if (quality == state().imageSmoothingQuality())
-        return;
-
-    modifiableState().setImageSmoothingQuality(quality);
-}
-
 void CanvasRenderingContext2D::getContextAttributes(Canvas2DContextAttributes& attrs) const
 {
     attrs.setAlpha(m_hasAlpha);
@@ -2307,71 +1021,4 @@
     return 0;
 }
 
-void CanvasRenderingContext2D::checkOverdraw(const SkRect& rect, const SkPaint* paint, CanvasRenderingContext2DState::ImageType imageType, DrawType drawType)
-{
-    SkCanvas* c = drawingCanvas();
-    if (!c || !canvas()->buffer()->isRecording())
-        return;
-
-    SkRect deviceRect;
-    if (drawType == UntransformedUnclippedFill) {
-        deviceRect = rect;
-    } else {
-        ASSERT(drawType == ClipFill);
-        if (state().hasComplexClip())
-            return;
-
-        SkIRect skIBounds;
-        if (!c->getClipDeviceBounds(&skIBounds))
-            return;
-        deviceRect = SkRect::Make(skIBounds);
-    }
-
-    const SkImageInfo& imageInfo = c->imageInfo();
-    if (!deviceRect.contains(SkRect::MakeWH(imageInfo.width(), imageInfo.height())))
-        return;
-
-    bool isSourceOver = true;
-    unsigned alpha = 0xFF;
-    if (paint) {
-        if (paint->getLooper() || paint->getImageFilter() || paint->getMaskFilter())
-            return;
-
-        SkXfermode* xfermode = paint->getXfermode();
-        if (xfermode) {
-            SkXfermode::Mode mode;
-            if (xfermode->asMode(&mode)) {
-                isSourceOver = mode == SkXfermode::kSrcOver_Mode;
-                if (!isSourceOver && mode != SkXfermode::kSrc_Mode && mode != SkXfermode::kClear_Mode)
-                    return; // The code below only knows how to handle Src, SrcOver, and Clear
-            } else {
-                // unknown xfermode
-                ASSERT_NOT_REACHED();
-                return;
-            }
-        }
-
-        alpha = paint->getAlpha();
-
-        if (isSourceOver && imageType == CanvasRenderingContext2DState::NoImage) {
-            SkShader* shader = paint->getShader();
-            if (shader) {
-                if (shader->isOpaque() && alpha == 0xFF)
-                    canvas()->buffer()->willOverwriteCanvas();
-                return;
-            }
-        }
-    }
-
-    if (isSourceOver) {
-        // With source over, we need to certify that alpha == 0xFF for all pixels
-        if (imageType == CanvasRenderingContext2DState::NonOpaqueImage)
-            return;
-        if (alpha < 0xFF)
-            return;
-    }
-
-    canvas()->buffer()->willOverwriteCanvas();
-}
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h
index 5106883c..f9b787c 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h
@@ -33,8 +33,8 @@
 #include "core/html/canvas/CanvasRenderingContextFactory.h"
 #include "core/svg/SVGResourceClient.h"
 #include "modules/ModulesExport.h"
+#include "modules/canvas2d/BaseRenderingContext2D.h"
 #include "modules/canvas2d/Canvas2DContextAttributes.h"
-#include "modules/canvas2d/CanvasPathMethods.h"
 #include "modules/canvas2d/CanvasRenderingContext2DState.h"
 #include "platform/graphics/GraphicsTypes.h"
 #include "platform/heap/GarbageCollected.h"
@@ -56,15 +56,15 @@
 class HitRegion;
 class HitRegionOptions;
 class HitRegionManager;
-class ImageData;
 class Path2D;
 class SVGMatrixTearOff;
 class TextMetrics;
 
 typedef HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap CanvasImageSourceUnion;
 
-class MODULES_EXPORT CanvasRenderingContext2D final : public CanvasRenderingContext, public CanvasPathMethods, public WebThread::TaskObserver, public SVGResourceClient {
+class MODULES_EXPORT CanvasRenderingContext2D final : public CanvasRenderingContext, public BaseRenderingContext2D, public WebThread::TaskObserver, public SVGResourceClient {
     DEFINE_WRAPPERTYPEINFO();
+    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CanvasRenderingContext2D);
     WILL_BE_USING_PRE_FINALIZER(CanvasRenderingContext2D, dispose);
 public:
     class Factory : public CanvasRenderingContextFactory {
@@ -83,104 +83,14 @@
 
     ~CanvasRenderingContext2D() override;
 
-    void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const;
-    void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&);
-
-    void fillStyle(StringOrCanvasGradientOrCanvasPattern&) const;
-    void setFillStyle(const StringOrCanvasGradientOrCanvasPattern&);
-
-    double lineWidth() const;
-    void setLineWidth(double);
-
-    String lineCap() const;
-    void setLineCap(const String&);
-
-    String lineJoin() const;
-    void setLineJoin(const String&);
-
-    double miterLimit() const;
-    void setMiterLimit(double);
-
-    const Vector<double>& getLineDash() const;
-    void setLineDash(const Vector<double>&);
-
-    double lineDashOffset() const;
-    void setLineDashOffset(double);
-
-    double shadowOffsetX() const;
-    void setShadowOffsetX(double);
-
-    double shadowOffsetY() const;
-    void setShadowOffsetY(double);
-
-    double shadowBlur() const;
-    void setShadowBlur(double);
-
-    String shadowColor() const;
-    void setShadowColor(const String&);
-
-    double globalAlpha() const;
-    void setGlobalAlpha(double);
-
     bool isContextLost() const override;
 
-    bool shouldAntialias() const;
     void setShouldAntialias(bool) override;
 
-    String globalCompositeOperation() const;
-    void setGlobalCompositeOperation(const String&);
-
-    String filter() const;
-    void setFilter(const String&);
-
-    void save();
-    void restore();
-
-    PassRefPtrWillBeRawPtr<SVGMatrixTearOff> currentTransform() const;
-    void setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff>);
-
-    void scale(double sx, double sy);
-    void rotate(double angleInRadians);
-    void translate(double tx, double ty);
-    void transform(double m11, double m12, double m21, double m22, double dx, double dy);
-    void setTransform(double m11, double m12, double m21, double m22, double dx, double dy);
-    void resetTransform();
-
-    void beginPath();
-
-    void fill(const String& winding = "nonzero");
-    void fill(Path2D*, const String& winding = "nonzero");
-    void stroke();
-    void stroke(Path2D*);
-    void clip(const String& winding = "nonzero");
-    void clip(Path2D*, const String& winding = "nonzero");
-
-    bool isPointInPath(const double x, const double y, const String& winding = "nonzero");
-    bool isPointInPath(Path2D*, const double x, const double y, const String& winding = "nonzero");
-    bool isPointInStroke(const double x, const double y);
-    bool isPointInStroke(Path2D*, const double x, const double y);
-
     void scrollPathIntoView();
     void scrollPathIntoView(Path2D*);
 
     void clearRect(double x, double y, double width, double height) override;
-    void fillRect(double x, double y, double width, double height);
-    void strokeRect(double x, double y, double width, double height);
-
-    void drawImage(const CanvasImageSourceUnion&, double x, double y, ExceptionState&);
-    void drawImage(const CanvasImageSourceUnion&, double x, double y, double width, double height, ExceptionState&);
-    void drawImage(const CanvasImageSourceUnion&, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&);
-    void drawImage(CanvasImageSource*, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&);
-
-    CanvasGradient* createLinearGradient(double x0, double y0, double x1, double y1);
-    CanvasGradient* createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState&);
-    CanvasPattern* createPattern(const CanvasImageSourceUnion&, const String& repetitionType, ExceptionState&);
-
-    ImageData* createImageData(ImageData*) const;
-    ImageData* createImageData(double width, double height, ExceptionState&) const;
-    ImageData* getImageData(double sx, double sy, double sw, double sh, ExceptionState&) const;
-    void putImageData(ImageData*, double dx, double dy, ExceptionState&);
-    void putImageData(ImageData*, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight, ExceptionState&);
 
     void reset() override;
 
@@ -202,11 +112,6 @@
     void strokeText(const String& text, double x, double y, double maxWidth);
     TextMetrics* measureText(const String& text);
 
-    bool imageSmoothingEnabled() const;
-    void setImageSmoothingEnabled(bool);
-    String imageSmoothingQuality() const;
-    void setImageSmoothingQuality(const String&);
-
     void getContextAttributes(Canvas2DContextAttributes&) const;
 
     void drawFocusIfNeeded(Element*);
@@ -232,6 +137,31 @@
     // SVGResourceClient implementation
     void filterNeedsInvalidation() override;
 
+    // BaseRenderingContext2D implementation
+    bool originClean() const final;
+    void setOriginTainted() final;
+    bool wouldTaintOrigin(CanvasImageSource* source) final { return CanvasRenderingContext::wouldTaintOrigin(source); }
+
+    int width() const final;
+    int height() const final;
+
+    bool hasImageBuffer() const final;
+    ImageBuffer* imageBuffer() const final;
+
+    bool parseColorOrCurrentColor(Color&, const String& colorString) const final;
+
+    SkCanvas* drawingCanvas() const final;
+    SkCanvas* existingDrawingCanvas() const final;
+    void disableDeferral(DisableDeferralReason) final;
+
+    AffineTransform baseTransform() const final;
+    void didDraw(const SkIRect& dirtyRect) final;
+
+    bool stateHasFilter() final;
+    SkImageFilter* stateGetFilter() final;
+
+    void validateStateStack() final;
+
 private:
     friend class CanvasRenderingContext2DAutoRestoreSkCanvas;
 
@@ -239,38 +169,15 @@
 
     void dispose();
 
-    CanvasRenderingContext2DState& modifiableState();
-    const CanvasRenderingContext2DState& state() const { return *m_stateStack.last(); }
-
-    void setShadow(const FloatSize& offset, double blur, RGBA32 color);
-
     void dispatchContextLostEvent(Timer<CanvasRenderingContext2D>*);
     void dispatchContextRestoredEvent(Timer<CanvasRenderingContext2D>*);
     void tryRestoreContextEvent(Timer<CanvasRenderingContext2D>*);
 
-    bool computeDirtyRect(const FloatRect& localBounds, SkIRect*);
-    bool computeDirtyRect(const FloatRect& localBounds, const SkIRect& transformedClipBounds, SkIRect*);
-    void didDraw(const SkIRect&);
-
-    SkCanvas* drawingCanvas() const;
-
     void unwindStateStack();
-    void realizeSaves();
 
     void pruneLocalFontCache(size_t targetSize);
     void schedulePruneLocalFontCacheIfNeeded();
 
-    bool shouldDrawImageAntialiased(const FloatRect& destRect) const;
-
-    template<typename DrawFunc, typename ContainsFunc>
-    bool draw(const DrawFunc&, const ContainsFunc&, const SkRect& bounds, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType = CanvasRenderingContext2DState::NoImage);
-    void drawPathInternal(const Path&, CanvasRenderingContext2DState::PaintType, SkPath::FillType = SkPath::kWinding_FillType);
-    void drawImageInternal(SkCanvas*, CanvasImageSource*, Image*, const FloatRect& srcRect, const FloatRect& dstRect, const SkPaint*);
-    void clipInternal(const Path&, const String& windingRuleString);
-
-    bool isPointInPathInternal(const Path&, const double x, const double y, const String& windingRuleString);
-    bool isPointInStrokeInternal(const Path&, const double x, const double y);
-
     void scrollPathIntoViewInternal(const Path&);
 
     void drawTextInternal(const String&, double x, double y, CanvasRenderingContext2DState::PaintType, double* maxWidth = nullptr);
@@ -278,28 +185,11 @@
     const Font& accessFont();
     int getFontBaseline(const FontMetrics&) const;
 
-    void clearCanvas();
-    bool rectContainsTransformedRect(const FloatRect&, const SkIRect&) const;
-
-    void inflateStrokeRect(FloatRect&) const;
-
-    template<typename DrawFunc>
-    void compositedDraw(const DrawFunc&, SkCanvas*, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType);
-
     void drawFocusIfNeededInternal(const Path&, Element*);
     bool focusRingCallIsValid(const Path&, Element*);
     void drawFocusRing(const Path&);
     void updateElementAccessibility(const Path&, Element*);
 
-    void validateStateStack();
-
-    enum DrawType {
-        ClipFill, // Fill that is already known to cover the current clip
-        UntransformedUnclippedFill
-    };
-
-    void checkOverdraw(const SkRect&, const SkPaint*, CanvasRenderingContext2DState::ImageType, DrawType);
-
     CanvasRenderingContext::ContextType contextType() const override { return CanvasRenderingContext::Context2d; }
     bool is2d() const override { return true; }
     bool isAccelerated() const override;
@@ -312,9 +202,7 @@
 
     WebLayer* platformLayer() const override;
 
-    WillBeHeapVector<OwnPtrWillBeMember<CanvasRenderingContext2DState>> m_stateStack;
     PersistentWillBeMember<HitRegionManager> m_hitRegionManager;
-    AntiAliasingMode m_clipAntialiasing;
     bool m_hasAlpha;
     LostContextMode m_contextLostMode;
     bool m_contextRestorable;
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorker.idl b/third_party/WebKit/Source/modules/compositorworker/CompositorWorker.idl
index b2abf90..c7a57ede 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorker.idl
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorker.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString scriptUrl),
     ConstructorCallWith=ExecutionContext,
     GarbageCollected,
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.idl b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.idl
index cd84fc7..5c3e214 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.idl
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
 ] interface MediaKeySession : EventTarget {
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.idl b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.idl
index da7fe23..8bf9389 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.idl
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.idl
@@ -29,7 +29,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
 ] interface MediaKeys {
diff --git a/third_party/WebKit/Source/modules/fetch/Body.idl b/third_party/WebKit/Source/modules/fetch/Body.idl
index a44c0d9..f943545d 100644
--- a/third_party/WebKit/Source/modules/fetch/Body.idl
+++ b/third_party/WebKit/Source/modules/fetch/Body.idl
@@ -7,7 +7,7 @@
 [
     Exposed=ServiceWorker,
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface Body {
     readonly attribute boolean bodyUsed;
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
index dd37431..7705bade 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -526,8 +526,6 @@
     ResourceRequest request(m_request->url());
     request.setRequestContext(m_request->context());
     request.setHTTPMethod(m_request->method());
-    request.setFetchRequestMode(m_request->mode());
-    request.setFetchCredentialsMode(m_request->credentials());
     const Vector<OwnPtr<FetchHeaderList::Header>>& list = m_request->headerList()->list();
     for (size_t i = 0; i < list.size(); ++i) {
         request.addHTTPHeaderField(AtomicString(list[i]->first), AtomicString(list[i]->second));
diff --git a/third_party/WebKit/Source/modules/fetch/Request.idl b/third_party/WebKit/Source/modules/fetch/Request.idl
index e39b1df..7fe8fed 100644
--- a/third_party/WebKit/Source/modules/fetch/Request.idl
+++ b/third_party/WebKit/Source/modules/fetch/Request.idl
@@ -22,7 +22,7 @@
     ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
     RaisesException=Constructor,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface Request {
     readonly attribute ByteString method;
diff --git a/third_party/WebKit/Source/modules/fetch/Response.idl b/third_party/WebKit/Source/modules/fetch/Response.idl
index 4ac9f403..cd8a275 100644
--- a/third_party/WebKit/Source/modules/fetch/Response.idl
+++ b/third_party/WebKit/Source/modules/fetch/Response.idl
@@ -13,7 +13,7 @@
     ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
     RaisesException=Constructor,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface Response {
     [CallWith=ExecutionContext] static Response error();
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.idl b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.idl
index 80f5032..1652123 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.idl
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.idl
@@ -31,7 +31,7 @@
 
 [
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface DOMFileSystem {
     readonly attribute DOMString name;
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriter.idl b/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
index 4cac0d00..a58d4b7 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
@@ -31,7 +31,7 @@
 
 [
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface FileWriter : EventTarget {
     // ready states
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.idl b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.idl
index b2d8dd0..b6d72d4 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.idl
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.idl
@@ -28,7 +28,7 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface IDBDatabase : EventTarget {
     readonly attribute DOMString name;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.idl b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.idl
index 94d76f1f..0620d7f 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.idl
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.idl
@@ -38,7 +38,7 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface IDBRequest : EventTarget {
     [RaisesException=Getter, CachedAttribute=isResultDirty] readonly attribute any result;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.idl b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.idl
index 63e3962..abe303d0 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.idl
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.idl
@@ -36,7 +36,7 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected
 ] interface IDBTransaction : EventTarget {
 
diff --git a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.idl b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.idl
index de21c3611..aa15744a 100644
--- a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.idl
+++ b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.idl
@@ -8,7 +8,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(MediaStream stream, optional MediaRecorderOptions options),
     ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.idl b/third_party/WebKit/Source/modules/mediasource/MediaSource.idl
index 5bd5c097..253faa0 100644
--- a/third_party/WebKit/Source/modules/mediasource/MediaSource.idl
+++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.idl
@@ -36,7 +36,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
     RuntimeEnabled=MediaSource,
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.idl b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.idl
index c33da96d..a3f206e 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.idl
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.idl
@@ -36,7 +36,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=MediaSource,
 ] interface SourceBuffer : EventTarget {
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl
index f9ac2563..1c7f1fd 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl
@@ -24,7 +24,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject
+    DependentLifetime
 ] interface MediaStreamTrack : EventTarget {
     readonly attribute DOMString kind;
     readonly attribute DOMString id;
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.idl b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.idl
index c6f6076d..25cd3e57 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.idl
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.idl
@@ -26,7 +26,7 @@
 [
     GarbageCollected,
     NoInterfaceObject,
-    ActiveDOMObject
+    DependentLifetime
 ] interface RTCDTMFSender : EventTarget {
     readonly attribute boolean canInsertDTMF;
     readonly attribute MediaStreamTrack track;
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl
index 2908a9c..4bf0f5d1 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl
+++ b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl
@@ -63,7 +63,7 @@
 //  * VoidCallback -> VoidFunction
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     // TODO(guidou): There should only be one constructor argument, and it
     // should be optional.
     Constructor(Dictionary rtcConfiguration, optional Dictionary mediaConstraints),
diff --git a/third_party/WebKit/Source/modules/modules.gypi b/third_party/WebKit/Source/modules/modules.gypi
index 5d03bed..b3a6eb2 100644
--- a/third_party/WebKit/Source/modules/modules.gypi
+++ b/third_party/WebKit/Source/modules/modules.gypi
@@ -792,8 +792,6 @@
       'battery/BatteryDispatcher.h',
       'battery/BatteryManager.cpp',
       'battery/BatteryManager.h',
-      'battery/BatteryStatus.cpp',
-      'battery/BatteryStatus.h',
       'battery/NavigatorBattery.cpp',
       'battery/NavigatorBattery.h',
       'beacon/NavigatorBeacon.cpp',
@@ -830,6 +828,8 @@
       'cachestorage/GlobalCacheStorage.h',
       'cachestorage/InspectorCacheStorageAgent.cpp',
       'cachestorage/InspectorCacheStorageAgent.h',
+      'canvas2d/BaseRenderingContext2D.cpp',
+      'canvas2d/BaseRenderingContext2D.h',
       'canvas2d/CanvasGradient.cpp',
       'canvas2d/CanvasGradient.h',
       'canvas2d/CanvasPathMethods.cpp',
@@ -1865,6 +1865,7 @@
     # 'partial interface' or target (right side of) 'implements'
     'modules_testing_dependency_idl_files' : [
       'accessibility/testing/InternalsAccessibility.idl',
+      'battery/testing/InternalsBattery.idl',
       'geolocation/testing/InternalsGeolocation.idl',
       'navigatorcontentutils/testing/InternalsNavigatorContentUtils.idl',
       'serviceworkers/testing/InternalsServiceWorker.idl',
@@ -1875,6 +1876,8 @@
     'modules_testing_files': [
       'accessibility/testing/InternalsAccessibility.cpp',
       'accessibility/testing/InternalsAccessibility.h',
+      'battery/testing/InternalsBattery.cpp',
+      'battery/testing/InternalsBattery.h',
       'geolocation/testing/GeolocationClientMock.cpp',
       'geolocation/testing/GeolocationClientMock.h',
       'geolocation/testing/InternalsGeolocation.cpp',
diff --git a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.idl b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.idl
index b8d5bfeb..c45ccdb 100644
--- a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.idl
+++ b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.idl
@@ -19,7 +19,7 @@
     RuntimeEnabled=NetworkInformation,
     Exposed=(Window,Worker),
     GarbageCollected,
-    ActiveDOMObject
+    DependentLifetime
 ] interface NetworkInformation : EventTarget {
     [MeasureAs=NetInfoType] readonly attribute ConnectionType type;
     [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoDownlinkMax] readonly attribute Megabit downlinkMax;
diff --git a/third_party/WebKit/Source/modules/notifications/Notification.idl b/third_party/WebKit/Source/modules/notifications/Notification.idl
index 8e014a4..8ad23a1 100644
--- a/third_party/WebKit/Source/modules/notifications/Notification.idl
+++ b/third_party/WebKit/Source/modules/notifications/Notification.idl
@@ -41,7 +41,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString title, optional NotificationOptions options),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
diff --git a/third_party/WebKit/Source/modules/permissions/PermissionStatus.idl b/third_party/WebKit/Source/modules/permissions/PermissionStatus.idl
index c2956cf..e62fa89c 100644
--- a/third_party/WebKit/Source/modules/permissions/PermissionStatus.idl
+++ b/third_party/WebKit/Source/modules/permissions/PermissionStatus.idl
@@ -12,7 +12,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     Exposed=(Window,Worker),
     RuntimeEnabled=Permissions,
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.idl b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.idl
index 4afd90323..a1c72cb 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationAvailability.idl
+++ b/third_party/WebKit/Source/modules/presentation/PresentationAvailability.idl
@@ -5,7 +5,7 @@
 // https://w3c.github.io/presentation-api/#interface-presentationavailability
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     RuntimeEnabled=Presentation,
 ] interface PresentationAvailability : EventTarget {
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationRequest.idl b/third_party/WebKit/Source/modules/presentation/PresentationRequest.idl
index 504f7cd..dc92159 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationRequest.idl
+++ b/third_party/WebKit/Source/modules/presentation/PresentationRequest.idl
@@ -9,7 +9,7 @@
     Constructor(DOMString url),
     ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     RuntimeEnabled=Presentation,
     MeasureAs=PresentationRequestConstructor
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.idl b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.idl
index 530a8aa..12f157b 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.idl
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.idl
@@ -39,7 +39,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface ServiceWorker : EventTarget {
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
index 6db0f72..97d7b82 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -5,7 +5,7 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-registration-obj
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface ServiceWorkerRegistration : EventTarget {
     [Unforgeable] readonly attribute ServiceWorker? installing;
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognition.idl b/third_party/WebKit/Source/modules/speech/SpeechRecognition.idl
index 4e13bbb..cbd14c28 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognition.idl
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognition.idl
@@ -26,7 +26,7 @@
 [
     GarbageCollected,
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
 ] interface SpeechRecognition : EventTarget {
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContext.idl b/third_party/WebKit/Source/modules/webaudio/AudioContext.idl
index 46861176..b56876e 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioContext.idl
+++ b/third_party/WebKit/Source/modules/webaudio/AudioContext.idl
@@ -31,7 +31,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=Document,
     ImplementedAs=AbstractAudioContext,
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.idl b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.idl
index a65381df..7cebf53 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.idl
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
 ] interface MIDIAccess : EventTarget {
     readonly attribute MIDIInputMap inputs;
     readonly attribute MIDIOutputMap outputs;
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIPort.idl b/third_party/WebKit/Source/modules/webmidi/MIDIPort.idl
index 726fd01..0f44867 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIPort.idl
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIPort.idl
@@ -45,7 +45,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface MIDIPort : EventTarget {
     readonly attribute MIDIPortConnectionState connection;
diff --git a/third_party/WebKit/Source/modules/websockets/WebSocket.idl b/third_party/WebKit/Source/modules/websockets/WebSocket.idl
index c04a73a8..ee12816 100644
--- a/third_party/WebKit/Source/modules/websockets/WebSocket.idl
+++ b/third_party/WebKit/Source/modules/websockets/WebSocket.idl
@@ -34,7 +34,7 @@
 enum BinaryType { "blob", "arraybuffer" };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString url, optional (DOMString or sequence<DOMString>) protocols),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
diff --git a/third_party/WebKit/Source/modules/worklet/Worklet.idl b/third_party/WebKit/Source/modules/worklet/Worklet.idl
index f04dd1d..0744c69 100644
--- a/third_party/WebKit/Source/modules/worklet/Worklet.idl
+++ b/third_party/WebKit/Source/modules/worklet/Worklet.idl
@@ -5,7 +5,7 @@
 // https://drafts.css-houdini.org/worklets/#worklet
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     RuntimeEnabled=Worklet,
 ] interface Worklet {
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn
index 955f2fa..f9ae6ae 100644
--- a/third_party/WebKit/Source/platform/BUILD.gn
+++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -335,6 +335,8 @@
     "//v8",
   ]
   deps = [
+    "//device/battery:mojo_bindings",
+    "//mojo/public/c/system:for_component",
     "//third_party/WebKit/Source/platform/heap",
     "//third_party/harfbuzz-ng",
     "//third_party/icu",
@@ -459,6 +461,15 @@
     "//testing/gmock",
   ]
 
+  deps = [
+    "//device/battery",
+    "//device/battery:mojo_bindings",
+    "//mojo/edk/system",
+  ]
+  if (is_android) {
+    deps -= [ "//device/battery" ]
+  }
+
   if (is_win) {
     cflags = [ "/wd4267" ]  # Truncation from size_t to int.
   }
@@ -533,6 +544,8 @@
     "//cc",
     "//cc:test_support",
     "//cc/blink",
+    "//mojo/edk/embedder:headers",
+    "//mojo/edk/test:test_support",
     "//skia",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/third_party/WebKit/Source/platform/DEPS b/third_party/WebKit/Source/platform/DEPS
index 9566235c..e01c85e 100644
--- a/third_party/WebKit/Source/platform/DEPS
+++ b/third_party/WebKit/Source/platform/DEPS
@@ -4,14 +4,17 @@
     "+base/files",
     "+base/json",
     "+base/location.h",
+    "+base/memory",
     "+base/metrics/histogram.h",
     "+base/metrics/sparse_histogram.h",
+    "+base/strings/stringprintf.h",
     "+base/synchronization/waitable_event.h",
-    "+base/memory",
     "+base/sys_info.h",
+    "+base/thread_task_runner_handle.h",
     "+base/time",
     "+base/trace_event",
     "+base/values.h",
+    "+device",
     "+mozilla",
     "+platform",
     "+public/platform",
diff --git a/content/renderer/battery_status/OWNERS b/third_party/WebKit/Source/platform/battery/OWNERS
similarity index 100%
rename from content/renderer/battery_status/OWNERS
rename to third_party/WebKit/Source/platform/battery/OWNERS
diff --git a/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.cc b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.cc
new file mode 100644
index 0000000..1d052ddda
--- /dev/null
+++ b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.cc
@@ -0,0 +1,55 @@
+// 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.
+
+#include "platform/battery/battery_dispatcher_proxy.h"
+
+#include "platform/battery/battery_status.h"
+#include "platform/threading/BindForMojo.h"
+#include "public/platform/Platform.h"
+#include "wtf/Assertions.h"
+
+namespace blink {
+
+BatteryDispatcherProxy::BatteryDispatcherProxy(Listener* listener)
+    : listener_(listener) {
+  ASSERT(listener_);
+}
+
+BatteryDispatcherProxy::~BatteryDispatcherProxy() {}
+
+void BatteryDispatcherProxy::StartListening() {
+  ASSERT(!monitor_.is_bound());
+  Platform::current()->connectToRemoteService(mojo::GetProxy(&monitor_));
+  // monitor_ can be null during testing.
+  if (monitor_)
+    QueryNextStatus();
+}
+
+void BatteryDispatcherProxy::StopListening() {
+  // monitor_ can be null during testing.
+  if (monitor_)
+    monitor_.reset();
+}
+
+void BatteryDispatcherProxy::QueryNextStatus() {
+  monitor_->QueryNextStatus(
+      sameThreadBindForMojo(&BatteryDispatcherProxy::OnDidChange, this));
+}
+
+void BatteryDispatcherProxy::OnDidChange(
+    device::BatteryStatusPtr battery_status) {
+  // monitor_ can be null during testing.
+  if (monitor_)
+    QueryNextStatus();
+
+  DCHECK(battery_status);
+
+  BatteryStatus status(battery_status->charging,
+                       battery_status->charging_time,
+                       battery_status->discharging_time,
+                       battery_status->level);
+  listener_->OnUpdateBatteryStatus(status);
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.h b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.h
new file mode 100644
index 0000000..fc84f334
--- /dev/null
+++ b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy.h
@@ -0,0 +1,52 @@
+// 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 BLINK_PLATFORM_BATTERY_BATTERY_DISPATCHER_PROXY_H_
+#define BLINK_PLATFORM_BATTERY_BATTERY_DISPATCHER_PROXY_H_
+
+#include "device/battery/battery_monitor.mojom.h"
+#include "platform/PlatformExport.h"
+#include "wtf/Noncopyable.h"
+
+namespace blink {
+
+class BatteryStatus;
+
+// This class connects a BatteryDispatcherProxy::Listener to the underlying Mojo
+// service.  Note that currently the access to the Mojo service is limited in
+// platform/.  In future, we'll let classes in core/ and modules/ directly
+// communicate with Mojo, and then, there will be no need to use this proxy
+// class.
+//
+// TODO(yukishiino): Remove this class once Mojo supports WTF-types.
+class PLATFORM_EXPORT BatteryDispatcherProxy {
+  WTF_MAKE_NONCOPYABLE(BatteryDispatcherProxy);
+ public:
+  class PLATFORM_EXPORT Listener {
+   public:
+    virtual ~Listener() = default;
+
+    // This method is called when a new battery status is available.
+    virtual void OnUpdateBatteryStatus(const BatteryStatus&) = 0;
+  };
+
+  explicit BatteryDispatcherProxy(Listener*);
+  ~BatteryDispatcherProxy();
+
+  void StartListening();
+  void StopListening();
+
+ private:
+  void QueryNextStatus();
+  void OnDidChange(device::BatteryStatusPtr);
+
+  device::BatteryMonitorPtr monitor_;
+  Listener* listener_;
+
+  friend class BatteryDispatcherProxyTest;
+};
+
+}  // namespace blink
+
+#endif  // BLINK_PLATFORM_BATTERY_BATTERY_DISPATCHER_PROXY_H_
diff --git a/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy_unittest.cc b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy_unittest.cc
new file mode 100644
index 0000000..2409ec5
--- /dev/null
+++ b/third_party/WebKit/Source/platform/battery/battery_dispatcher_proxy_unittest.cc
@@ -0,0 +1,76 @@
+// 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.
+
+#include "platform/battery/battery_dispatcher_proxy.h"
+
+#include "platform/battery/battery_status.h"
+#include "platform/testing/MessageLoopForMojo.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/Noncopyable.h"
+#include "wtf/OwnPtr.h"
+#include "wtf/PassOwnPtr.h"
+
+namespace blink {
+
+class MockBatteryStatusListener : public BatteryDispatcherProxy::Listener {
+  WTF_MAKE_NONCOPYABLE(MockBatteryStatusListener);
+ public:
+  MockBatteryStatusListener() : did_change_battery_status_(false) {}
+
+  // BatteryDispatcherProxy::Listener method.
+  void OnUpdateBatteryStatus(const BatteryStatus& status) override {
+    status_ = status;
+    did_change_battery_status_ = true;
+  }
+
+  const BatteryStatus& status() const { return status_; }
+  bool did_change_battery_status() const { return did_change_battery_status_; }
+
+ private:
+  bool did_change_battery_status_;
+  BatteryStatus status_;
+};
+
+class BatteryDispatcherProxyTest : public testing::Test {
+ public:
+  void UpdateBatteryStatus(const device::BatteryStatus& status) {
+    device::BatteryStatusPtr status_ptr(device::BatteryStatus::New());
+    *status_ptr = status;
+    dispatcher_->OnDidChange(std::move(status_ptr));
+  }
+
+  const MockBatteryStatusListener& listener() const { return listener_; }
+
+ protected:
+  void SetUp() override {
+    dispatcher_ = adoptPtr(new BatteryDispatcherProxy(&listener_));
+  }
+
+ private:
+  base::MessageLoop message_loop_;
+  MockBatteryStatusListener listener_;
+  OwnPtr<BatteryDispatcherProxy> dispatcher_;
+};
+
+TEST_F(BatteryDispatcherProxyTest, UpdateListener) {
+  // TODO(darin): This test isn't super interesting. It just exercises
+  // conversion b/w device::BatteryStatus and blink::BatteryStatus.
+
+  device::BatteryStatus status;
+  status.charging = true;
+  status.charging_time = 100;
+  status.discharging_time = 200;
+  status.level = 0.5;
+
+  UpdateBatteryStatus(status);
+
+  const BatteryStatus& received_status = listener().status();
+  EXPECT_TRUE(listener().did_change_battery_status());
+  EXPECT_EQ(status.charging, received_status.charging());
+  EXPECT_EQ(status.charging_time, received_status.charging_time());
+  EXPECT_EQ(status.discharging_time, received_status.discharging_time());
+  EXPECT_EQ(status.level, received_status.level());
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/platform/battery/battery_status.h b/third_party/WebKit/Source/platform/battery/battery_status.h
new file mode 100644
index 0000000..5ae6ed95
--- /dev/null
+++ b/third_party/WebKit/Source/platform/battery/battery_status.h
@@ -0,0 +1,60 @@
+// 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 BLINK_PLATFORM_BATTERY_BATTERY_STATUS_H_
+#define BLINK_PLATFORM_BATTERY_BATTERY_STATUS_H_
+
+#include "platform/PlatformExport.h"
+#include "wtf/Assertions.h"
+
+#include <cmath>
+#include <limits>
+
+namespace blink {
+
+// Simple struct to hold the battery status.  This class is copyable.
+class PLATFORM_EXPORT BatteryStatus final {
+ public:
+  BatteryStatus()
+      : charging_(true),
+        charging_time_(0),
+        discharging_time_(std::numeric_limits<double>::infinity()),
+        level_(1) {}
+  BatteryStatus(bool charging,
+                double charging_time,
+                double discharging_time,
+                double level)
+      : charging_(charging),
+        charging_time_(charging_time),
+        discharging_time_(discharging_time),
+        level_(EnsureTwoSignificantDigits(level)) {}
+  BatteryStatus(const BatteryStatus&) = default;
+  BatteryStatus& operator=(const BatteryStatus&) = default;
+
+  bool charging() const { return charging_; }
+  double charging_time() const { return charging_time_; }
+  double discharging_time() const { return discharging_time_; }
+  double level() const { return level_; }
+
+ private:
+  double EnsureTwoSignificantDigits(double level) {
+    // Convert battery level value which should be in [0, 1] to a value in
+    // [0, 1] with 2 digits of precision. This is to provide a consistent
+    // experience across platforms (e.g. on Mac and Android the battery changes
+    // are generally reported with 1% granularity). It also serves the purpose
+    // of reducing the possibility of fingerprinting and triggers less level
+    // change events on platforms where the granularity is high.
+    ASSERT(level >= 0 && level <= 1);
+    return std::round(level * 100) / 100.f;
+  }
+
+  bool charging_;
+  double charging_time_;
+  double discharging_time_;
+  double level_;
+};
+
+}  // namespace blink
+
+#endif  // BLINK_PLATFORM_BATTERY_BATTERY_STATUS_H_
diff --git a/third_party/WebKit/Source/platform/blink_platform.gyp b/third_party/WebKit/Source/platform/blink_platform.gyp
index ee2cb4c8..ed3c26e 100644
--- a/third_party/WebKit/Source/platform/blink_platform.gyp
+++ b/third_party/WebKit/Source/platform/blink_platform.gyp
@@ -131,7 +131,10 @@
       'platform_generated.gyp:make_platform_generated',
       '<(DEPTH)/base/base.gyp:base',
       '<(DEPTH)/cc/cc.gyp:cc',
+      '<(DEPTH)/device/battery/battery.gyp:device_battery_mojo_bindings',
       '<(DEPTH)/gpu/gpu.gyp:gles2_c_lib',
+      '<(DEPTH)/mojo/mojo_base.gyp:mojo_environment_chromium',
+      '<(DEPTH)/mojo/mojo_edk.gyp:mojo_system_impl',
       '<(DEPTH)/skia/skia.gyp:skia',
       '<(DEPTH)/third_party/iccjpeg/iccjpeg.gyp:iccjpeg',
       '<(DEPTH)/third_party/icu/icu.gyp:icui18n',
diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi
index 0cb2f1a..76f22fc3 100644
--- a/third_party/WebKit/Source/platform/blink_platform.gypi
+++ b/third_party/WebKit/Source/platform/blink_platform.gypi
@@ -275,6 +275,9 @@
       'audio/ffmpeg/FFTFrameFFMPEG.cpp',
       'audio/ipp/FFTFrameIPP.cpp',
       'audio/mac/FFTFrameMac.cpp',
+      'battery/battery_dispatcher_proxy.cc',
+      'battery/battery_dispatcher_proxy.h',
+      'battery/battery_status.h',
       'blob/BlobData.cpp',
       'blob/BlobData.h',
       'blob/BlobRegistry.cpp',
@@ -991,6 +994,7 @@
       'text/UnicodeUtilities.h',
       'threading/BackgroundTaskRunner.cpp',
       'threading/BackgroundTaskRunner.h',
+      'threading/BindForMojo.h',
       'transforms/AffineTransform.cpp',
       'transforms/AffineTransform.h',
       'transforms/IdentityTransformOperation.h',
@@ -1069,6 +1073,12 @@
       'v8_inspector/public/V8ProfilerAgent.h',
       'v8_inspector/public/V8RuntimeAgent.h',
       'v8_inspector/public/V8StackTrace.h',
+      'web_memory_allocator_dump_impl.cc',
+      'web_memory_allocator_dump_impl.h',
+      'web_memory_dump_provider_adapter.cc',
+      'web_memory_dump_provider_adapter.h',
+      'web_process_memory_dump_impl.cc',
+      'web_process_memory_dump_impl.h',
       'weborigin/DatabaseIdentifier.cpp',
       'weborigin/DatabaseIdentifier.h',
       'weborigin/KURL.cpp',
@@ -1108,11 +1118,12 @@
       'WebScreenInfoTest.cpp',
       'WebVectorTest.cpp',
       'animation/AnimationTranslationUtilTest.cpp',
-      'animation/TimingFunctionTest.cpp',
-      'animation/UnitBezierTest.cpp',
       'animation/CompositorAnimationPlayerTest.cpp',
       'animation/CompositorAnimationTest.cpp',
       'animation/CompositorFloatAnimationCurveTest.cpp',
+      'animation/TimingFunctionTest.cpp',
+      'animation/UnitBezierTest.cpp',
+      'battery/battery_dispatcher_proxy_unittest.cc',
       'blob/BlobDataTest.cpp',
       'clipboard/ClipboardUtilitiesTest.cpp',
       'exported/FilePathConversionTest.cpp',
@@ -1178,6 +1189,7 @@
       'transforms/TransformOperationsTest.cpp',
       'transforms/TransformTestHelper.h',
       'transforms/TransformationMatrixTest.cpp',
+      'web_process_memory_dump_impl_test.cc',
       'weborigin/DatabaseIdentifierTest.cpp',
       'weborigin/KnownPortsTest.cpp',
       'weborigin/KURLTest.cpp',
@@ -1213,6 +1225,7 @@
       'graphics/test/FakeGraphicsLayerFactory.h',
       'testing/GeometryPrinters.cpp',
       'testing/GeometryPrinters.h',
+      'testing/MessageLoopForMojo.h',
       'testing/PaintPrinters.cpp',
       'testing/PaintPrinters.h',
       'testing/PictureMatchers.cpp',
diff --git a/third_party/WebKit/Source/platform/blink_platform_tests.gyp b/third_party/WebKit/Source/platform/blink_platform_tests.gyp
index 8525966..bd453eb 100644
--- a/third_party/WebKit/Source/platform/blink_platform_tests.gyp
+++ b/third_party/WebKit/Source/platform/blink_platform_tests.gyp
@@ -75,6 +75,7 @@
         '<(DEPTH)/cc/cc.gyp:cc',
         '<(DEPTH)/cc/cc_tests.gyp:cc_test_support',
         '<(DEPTH)/cc/blink/cc_blink.gyp:cc_blink',
+        '<(DEPTH)/mojo/mojo_edk.gyp:mojo_common_test_support',
         '<(DEPTH)/skia/skia.gyp:skia',
         '<(DEPTH)/third_party/harfbuzz-ng/harfbuzz.gyp:harfbuzz-ng',
         '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
@@ -110,6 +111,9 @@
         '../wtf/wtf.gyp:wtf',
         'blink_platform.gyp:blink_common',
         'blink_platform.gyp:blink_platform',
+        '<(DEPTH)/device/battery/battery.gyp:device_battery_mojo_bindings',
+        '<(DEPTH)/mojo/mojo_base.gyp:mojo_environment_chromium',
+        '<(DEPTH)/mojo/mojo_edk.gyp:mojo_system_impl',
         '<(DEPTH)/testing/gmock.gyp:gmock',
       ],
       'defines': [
@@ -123,6 +127,17 @@
       ],
       # Disable c4267 warnings until we fix size_t to int truncations.
       'msvs_disabled_warnings': [ 4267 ],
+      'conditions': [
+        ['OS == "android"', {
+          'dependencies': [
+            '<(DEPTH)/device/battery/battery.gyp:device_battery_java',
+          ],
+        }, {  # OS != "android"
+          'dependencies': [
+            '<(DEPTH)/device/battery/battery.gyp:device_battery',
+          ],
+        }],
+      ],
     },
   ],
   'conditions': [
diff --git a/third_party/WebKit/Source/platform/exported/Platform.cpp b/third_party/WebKit/Source/platform/exported/Platform.cpp
index 451fe7b..72904f7 100644
--- a/third_party/WebKit/Source/platform/exported/Platform.cpp
+++ b/third_party/WebKit/Source/platform/exported/Platform.cpp
@@ -28,13 +28,29 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "base/thread_task_runner_handle.h"
+#include "base/trace_event/memory_dump_manager.h"
 #include "platform/PartitionAllocMemoryDumpProvider.h"
 #include "platform/graphics/CompositorFactory.h"
+#include "platform/web_memory_dump_provider_adapter.h"
 #include "public/platform/Platform.h"
+#include "wtf/HashMap.h"
+#include "wtf/OwnPtr.h"
 
 namespace blink {
 
 static Platform* s_platform = 0;
+using ProviderToAdapterMap = HashMap<WebMemoryDumpProvider*, OwnPtr<WebMemoryDumpProviderAdapter>>;
+
+namespace {
+
+ProviderToAdapterMap& memoryDumpProviders()
+{
+    DEFINE_STATIC_LOCAL(ProviderToAdapterMap, providerToAdapterMap, ());
+    return providerToAdapterMap;
+}
+
+} // namespace
 
 Platform::Platform()
     : m_mainThread(0)
@@ -76,4 +92,25 @@
     return m_mainThread;
 }
 
+void Platform::registerMemoryDumpProvider(WebMemoryDumpProvider* provider, const char* name)
+{
+    WebMemoryDumpProviderAdapter* adapter = new WebMemoryDumpProviderAdapter(provider);
+    ProviderToAdapterMap::AddResult result = memoryDumpProviders().add(provider, adoptPtr(adapter));
+    if (!result.isNewEntry)
+        return;
+    adapter->set_is_registered(true);
+    base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(adapter, name, base::ThreadTaskRunnerHandle::Get());
+}
+
+void Platform::unregisterMemoryDumpProvider(WebMemoryDumpProvider* provider)
+{
+    ProviderToAdapterMap::iterator it = memoryDumpProviders().find(provider);
+    if (it == memoryDumpProviders().end())
+        return;
+    WebMemoryDumpProviderAdapter* adapter = it->value.get();
+    base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(adapter);
+    adapter->set_is_registered(false);
+    memoryDumpProviders().remove(it);
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaConstraints.cpp b/third_party/WebKit/Source/platform/exported/WebMediaConstraints.cpp
index 328125b..7266d99 100644
--- a/third_party/WebKit/Source/platform/exported/WebMediaConstraints.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebMediaConstraints.cpp
@@ -440,7 +440,7 @@
     , deviceId("deviceId")
     , groupId("groupId")
     , mediaStreamSource("mediaStreamSource")
-    , renderToAssociatedSink("renderToAssociatedSink")
+    , renderToAssociatedSink("chromeRenderToAssociatedSink")
     , hotwordEnabled("hotwordEnabled")
     , googEchoCancellation("googEchoCancellation")
     , googExperimentalEchoCancellation("googExperimentalEchoCancellation")
diff --git a/third_party/WebKit/Source/platform/fonts/Character.h b/third_party/WebKit/Source/platform/fonts/Character.h
index 091d8851..af407a6 100644
--- a/third_party/WebKit/Source/platform/fonts/Character.h
+++ b/third_party/WebKit/Source/platform/fonts/Character.h
@@ -95,6 +95,12 @@
     }
     static bool canReceiveTextEmphasis(UChar32);
 
+    static bool isGraphemeExtended(UChar32 c)
+    {
+        // http://unicode.org/reports/tr29/#Extend
+        return u_hasBinaryProperty(c, UCHAR_GRAPHEME_EXTEND);
+    }
+
     static bool isEmojiTextPresentation(UChar32);
     static bool isEmojiEmojiPresentation(UChar32);
     static bool isEmojiModifierBase(UChar32);
diff --git a/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp b/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
index 60e2c83..fe03220 100644
--- a/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
+++ b/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
@@ -9,9 +9,7 @@
 OrientationIterator::OrientationIterator(const UChar* buffer, unsigned bufferSize, FontOrientation runOrientation)
     : m_utf16Iterator(adoptPtr(new UTF16TextIterator(buffer, bufferSize)))
     , m_bufferSize(bufferSize)
-    , m_nextUChar32(0)
     , m_atEnd(bufferSize == 0)
-    , m_currentRenderOrientation(OrientationInvalid)
 {
     // There's not much point in segmenting by isUprightInVertical if the text
     // orientation is not "mixed".
@@ -23,19 +21,27 @@
     if (m_atEnd)
         return false;
 
-    while (m_utf16Iterator->consume(m_nextUChar32)) {
-        m_previousRenderOrientation = m_currentRenderOrientation;
-        m_currentRenderOrientation = Character::isUprightInMixedVertical(m_nextUChar32) ? OrientationKeep : OrientationRotateSideways;
+    RenderOrientation currentRenderOrientation = OrientationInvalid;
+    UChar32 nextUChar32;
+    while (m_utf16Iterator->consume(nextUChar32)) {
+        if (currentRenderOrientation == OrientationInvalid
+            || !Character::isGraphemeExtended(nextUChar32)) {
 
-        if (m_previousRenderOrientation != m_currentRenderOrientation && m_previousRenderOrientation != OrientationInvalid) {
-            *orientationLimit = m_utf16Iterator->offset();
-            *renderOrientation = m_previousRenderOrientation;
-            return true;
+            RenderOrientation previousRenderOrientation = currentRenderOrientation;
+            currentRenderOrientation =
+                Character::isUprightInMixedVertical(nextUChar32)
+                ? OrientationKeep : OrientationRotateSideways;
+            if (previousRenderOrientation != currentRenderOrientation
+                && previousRenderOrientation != OrientationInvalid) {
+                *orientationLimit = m_utf16Iterator->offset();
+                *renderOrientation = previousRenderOrientation;
+                return true;
+            }
         }
         m_utf16Iterator->advance();
     }
     *orientationLimit = m_bufferSize;
-    *renderOrientation = m_currentRenderOrientation;
+    *renderOrientation = currentRenderOrientation;
     m_atEnd = true;
     return true;
 }
diff --git a/third_party/WebKit/Source/platform/fonts/OrientationIterator.h b/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
index b2af1b3b..30ec83b 100644
--- a/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
+++ b/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
@@ -29,11 +29,7 @@
 private:
     OwnPtr<UTF16TextIterator> m_utf16Iterator;
     unsigned m_bufferSize;
-    UChar32 m_nextUChar32;
     bool m_atEnd;
-
-    RenderOrientation m_currentRenderOrientation;
-    RenderOrientation m_previousRenderOrientation;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/fonts/OrientationIteratorTest.cpp b/third_party/WebKit/Source/platform/fonts/OrientationIteratorTest.cpp
index 1d1433d..47ccac7 100644
--- a/third_party/WebKit/Source/platform/fonts/OrientationIteratorTest.cpp
+++ b/third_party/WebKit/Source/platform/fonts/OrientationIteratorTest.cpp
@@ -119,6 +119,43 @@
     CHECK_RUNS({ { "いろはにほへと", OrientationIterator::OrientationKeep } });
 }
 
+TEST_F(OrientationIteratorTest, IVS)
+{
+    CHECK_RUNS({ { "愉\xF3\xA0\x84\x81", OrientationIterator::OrientationKeep } });
+}
+
+TEST_F(OrientationIteratorTest, MarkAtFirstCharRotated)
+{
+    // Unicode General Category M should be combined with the previous base
+    // character, but they have their own orientation if they appear at the
+    // beginning of a run.
+    // http://www.unicode.org/reports/tr50/#grapheme_clusters
+    // https://drafts.csswg.org/css-writing-modes-3/#vertical-orientations
+    // U+0300 COMBINING GRAVE ACCENT is Mn (Mark, Nonspacing) with Rotated.
+    CHECK_RUNS({ { "\xCC\x80", OrientationIterator::OrientationRotateSideways } });
+}
+
+TEST_F(OrientationIteratorTest, MarkAtFirstCharUpright)
+{
+    // U+20DD COMBINING ENCLOSING CIRCLE is Me (Mark, Enclosing) with Upright.
+    CHECK_RUNS({ { "\xE2\x83\x9D", OrientationIterator::OrientationKeep } });
+}
+
+TEST_F(OrientationIteratorTest, MarksAtFirstCharUpright)
+{
+    // U+20DD COMBINING ENCLOSING CIRCLE is Me (Mark, Enclosing) with Upright.
+    // U+0300 COMBINING GRAVE ACCENT is Mn (Mark, Nonspacing) with Rotated.
+    CHECK_RUNS({ { "\xE2\x83\x9D\xCC\x80", OrientationIterator::OrientationKeep } });
+}
+
+TEST_F(OrientationIteratorTest, MarksAtFirstCharUprightThenBase)
+{
+    // U+20DD COMBINING ENCLOSING CIRCLE is Me (Mark, Enclosing) with Upright.
+    // U+0300 COMBINING GRAVE ACCENT is Mn (Mark, Nonspacing) with Rotated.
+    CHECK_RUNS({ { "\xE2\x83\x9D\xCC\x80", OrientationIterator::OrientationKeep },
+        { "ABC\xE2\x83\x9D", OrientationIterator::OrientationRotateSideways } });
+}
+
 TEST_F(OrientationIteratorTest, JapaneseLatinMixedInside)
 {
     CHECK_RUNS({ { "いろはに", OrientationIterator::OrientationKeep },
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
index 8cae029..1fa3796 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
@@ -26,6 +26,8 @@
 
 #include "SkSurface.h"
 #include "base/memory/scoped_ptr.h"
+#include "platform/Task.h"
+#include "platform/ThreadSafeFunctional.h"
 #include "platform/WaitableEvent.h"
 #include "platform/graphics/ImageBuffer.h"
 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
@@ -373,78 +375,80 @@
 };
 
 
-class CreateBridgeTask : public WebTaskRunner::Task {
-public:
-    CreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* mockCanvasContext, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent)
-        : m_bridgePtr(bridgePtr)
-        , m_mockCanvasContext(mockCanvasContext)
-        , m_testHost(testHost)
-        , m_doneEvent(doneEvent)
-    { }
+void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* mockCanvasContext, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent)
+{
+    OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(mockCanvasContext));
+    *bridgePtr = testHost->makeBridge(mainMockProvider.release(), IntSize(300, 300), Canvas2DLayerBridge::EnableAcceleration);
+    // draw+flush to trigger the creation of a GPU surface
+    (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1));
+    (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1));
+    (*bridgePtr)->flush();
+    doneEvent->signal();
+}
 
-    virtual ~CreateBridgeTask() { }
+void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* mockCanvasContext, Canvas2DLayerBridgeTest* testHost)
+{
+    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
+    testThread->taskRunner()->postTask(
+        location,
+        threadSafeBind(&runCreateBridgeTask,
+            AllowCrossThreadAccess(bridgePtr),
+            AllowCrossThreadAccess(mockCanvasContext),
+            AllowCrossThreadAccess(testHost),
+            AllowCrossThreadAccess(bridgeCreatedEvent.get())));
+    bridgeCreatedEvent->wait();
+}
 
-    void run() override
-    {
-        OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(m_mockCanvasContext));
-        *m_bridgePtr = m_testHost->makeBridge(mainMockProvider.release(), IntSize(300, 300), Canvas2DLayerBridge::EnableAcceleration);
-        // draw+flush to trigger the creation of a GPU surface
-        (*m_bridgePtr)->didDraw(FloatRect(0, 0, 1, 1));
-        (*m_bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1));
-        (*m_bridgePtr)->flush();
-        m_doneEvent->signal();
-    }
+void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* doneEvent)
+{
+    bridgePtr->clear();
+    if (doneEvent)
+        doneEvent->signal();
+}
 
-private:
-    Canvas2DLayerBridgePtr* m_bridgePtr;
-    MockCanvasContext* m_mockCanvasContext;
-    Canvas2DLayerBridgeTest* m_testHost;
-    WaitableEvent* m_doneEvent;
-};
+void postDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridgePtr* bridgePtr)
+{
+    testThread->taskRunner()->postTask(
+        location,
+        threadSafeBind(&runDestroyBridgeTask,
+            AllowCrossThreadAccess(bridgePtr),
+            nullptr));
+}
 
-class DestroyBridgeTask : public WebTaskRunner::Task {
-public:
-    DestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* doneEvent = nullptr)
-        : m_bridgePtr(bridgePtr)
-        , m_doneEvent(doneEvent)
-    { }
+void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridgePtr* bridgePtr)
+{
+    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
+    testThread->taskRunner()->postTask(
+        location,
+        threadSafeBind(&runDestroyBridgeTask,
+            AllowCrossThreadAccess(bridgePtr),
+            AllowCrossThreadAccess(bridgeDestroyedEvent.get())));
+    bridgeDestroyedEvent->wait();
+}
 
-    virtual ~DestroyBridgeTask() { }
+void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent)
+{
+    bridge->setIsHidden(value);
+    if (doneEvent)
+        doneEvent->signal();
+}
 
-    void run() override
-    {
-        m_bridgePtr->clear();
-        if (m_doneEvent)
-            m_doneEvent->signal();
-    }
+void postSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr)
+{
+    testThread->taskRunner()->postTask(
+        location,
+        threadSafeBind(&runSetIsHiddenTask,
+            AllowCrossThreadAccess(bridge),
+            value,
+            AllowCrossThreadAccess(doneEvent)));
+}
 
-private:
-    Canvas2DLayerBridgePtr* m_bridgePtr;
-    WaitableEvent* m_doneEvent;
-};
-
-class SetIsHiddenTask : public WebTaskRunner::Task {
-public:
-    SetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr)
-        : m_bridge(bridge)
-        , m_value(value)
-        , m_doneEvent(doneEvent)
-    { }
-
-    virtual ~SetIsHiddenTask() { }
-
-    void run() override
-    {
-        m_bridge->setIsHidden(m_value);
-        if (m_doneEvent)
-            m_doneEvent->signal();
-    }
-
-private:
-    Canvas2DLayerBridge* m_bridge;
-    bool m_value;
-    WaitableEvent* m_doneEvent;
-};
+void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridge* bridge, bool value)
+{
+    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get());
+    doneEvent->wait();
+}
 
 class MockImageBuffer : public ImageBuffer {
 public:
@@ -464,9 +468,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -478,7 +480,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isAccelerated());
@@ -486,10 +488,8 @@
     EXPECT_TRUE(bridge->checkSurfaceValid());
 
     // Test exiting hibernation
-    OwnPtr<WaitableEvent> hibernationEndedEvent = adoptPtr(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedNormally));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false, hibernationEndedEvent.get()));
-    hibernationEndedEvent->wait();
+    postAndWaitSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_TRUE(bridge->isAccelerated());
     EXPECT_FALSE(bridge->isHibernating());
@@ -497,9 +497,7 @@
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -512,9 +510,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
     bridge->disableDeferral(DisableDeferralReasonUnknown);
     MockImageBuffer mockImageBuffer;
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
@@ -530,7 +526,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
@@ -539,11 +535,9 @@
     EXPECT_TRUE(bridge->checkSurfaceValid());
 
     // Test exiting hibernation
-    OwnPtr<WaitableEvent> hibernationEndedEvent = adoptPtr(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedNormally));
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AtLeast(1)); // Because deferred rendering is disabled
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false, hibernationEndedEvent.get()));
-    hibernationEndedEvent->wait();
+    postAndWaitSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
     EXPECT_TRUE(bridge->isAccelerated());
@@ -552,34 +546,29 @@
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
 
-class RenderingTask : public WebTaskRunner::Task {
-public:
-    RenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent)
-        : m_bridge(bridge)
-        , m_doneEvent(doneEvent)
-    { }
+void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent)
+{
+    bridge->didDraw(FloatRect(0, 0, 1, 1));
+    bridge->finalizeFrame(FloatRect(0, 0, 1, 1));
+    bridge->flush();
+    doneEvent->signal();
+}
 
-    virtual ~RenderingTask() { }
-
-    void run() override
-    {
-        m_bridge->didDraw(FloatRect(0, 0, 1, 1));
-        m_bridge->finalizeFrame(FloatRect(0, 0, 1, 1));
-        m_bridge->flush();
-        m_doneEvent->signal();
-    }
-
-private:
-    Canvas2DLayerBridge* m_bridge;
-    WaitableEvent* m_doneEvent;
-};
+void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridge* bridge)
+{
+    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    testThread->taskRunner()->postTask(
+        location,
+        threadSafeBind(&runRenderingTask,
+            AllowCrossThreadAccess(bridge),
+            AllowCrossThreadAccess(doneEvent.get())));
+    doneEvent->wait();
+}
 
 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating)
 {
@@ -589,9 +578,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -603,7 +590,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isAccelerated());
@@ -612,18 +599,14 @@
 
     // Rendering in the background -> temp switch to SW
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedWithSwitchToBackgroundRendering));
-    OwnPtr<WaitableEvent> switchEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new RenderingTask(bridge.get(), switchEvent.get()));
-    switchEvent->wait();
+    postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get());
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isAccelerated());
     EXPECT_FALSE(bridge->isHibernating());
     EXPECT_TRUE(bridge->checkSurfaceValid());
 
     // Unhide
-    OwnPtr<WaitableEvent> unhideEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false, unhideEvent.get()));
-    unhideEvent->wait();
+    postAndWaitSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_TRUE(bridge->isAccelerated()); // Becoming visible causes switch back to GPU
     EXPECT_FALSE(bridge->isHibernating());
@@ -631,9 +614,7 @@
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -646,9 +627,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
     MockImageBuffer mockImageBuffer;
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
     bridge->setImageBuffer(&mockImageBuffer);
@@ -664,7 +643,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
@@ -675,9 +654,7 @@
     // Rendering in the background -> temp switch to SW
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedWithSwitchToBackgroundRendering));
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AtLeast(1));
-    OwnPtr<WaitableEvent> switchEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new RenderingTask(bridge.get(), switchEvent.get()));
-    switchEvent->wait();
+    postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get());
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
     EXPECT_FALSE(bridge->isAccelerated());
@@ -686,9 +663,7 @@
 
     // Unhide
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AtLeast(1));
-    OwnPtr<WaitableEvent> unhideEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false, unhideEvent.get()));
-    unhideEvent->wait();
+    postAndWaitSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
     EXPECT_TRUE(bridge->isAccelerated()); // Becoming visible causes switch back to GPU
@@ -698,9 +673,7 @@
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 }
 
 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating)
@@ -711,9 +684,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
     MockImageBuffer mockImageBuffer;
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
     bridge->setImageBuffer(&mockImageBuffer);
@@ -728,7 +699,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
@@ -748,9 +719,7 @@
 
     // Unhide
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AtLeast(1));
-    OwnPtr<WaitableEvent> unhideEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false, unhideEvent.get()));
-    unhideEvent->wait();
+    postAndWaitSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
     EXPECT_TRUE(bridge->isAccelerated()); // Becoming visible causes switch back to GPU
@@ -760,9 +729,7 @@
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
     EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 }
 
 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating)
@@ -773,9 +740,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -787,7 +752,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isAccelerated());
@@ -796,9 +761,7 @@
 
     // Tear down the bridge while hibernating
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedWithTeardown));
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -828,9 +791,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -840,8 +801,8 @@
     // Test entering hibernation
     OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true, hibernationScheduledEvent.get()));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, hibernationScheduledEvent.get());
+    postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
     // In production, we would expect a
     // HibernationAbortedDueToDestructionWhileHibernatePending event to be
     // fired, but that signal is lost in the unit test due to no longer having
@@ -860,23 +821,6 @@
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
 
-class BeginDestroyBridgeTask : public WebTaskRunner::Task {
-public:
-    BeginDestroyBridgeTask(Canvas2DLayerBridge* bridge)
-        : m_bridge(bridge)
-    { }
-
-    virtual ~BeginDestroyBridgeTask() { }
-
-    void run() override
-    {
-        m_bridge->beginDestruction();
-    }
-
-private:
-    Canvas2DLayerBridge* m_bridge;
-};
-
 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown)
 {
     MockCanvasContext mainMock;
@@ -885,9 +829,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -899,16 +841,14 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new BeginDestroyBridgeTask(bridge.get()));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
+    testThread->taskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Canvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get())));
     hibernationAbortedEvent->wait();
 
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
 
     // Tear down bridge on thread
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -921,9 +861,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -935,8 +873,8 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), false));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
     hibernationAbortedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_TRUE(bridge->isAccelerated());
@@ -945,9 +883,7 @@
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -960,9 +896,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -975,16 +909,14 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationAbortedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isHibernating());
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 
     ::testing::Mock::VerifyAndClearExpectations(&mainMock);
 }
@@ -997,9 +929,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -1011,7 +941,7 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
 
@@ -1023,9 +953,7 @@
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedWithTeardown));
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 }
 
 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering)
@@ -1036,9 +964,7 @@
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
     Canvas2DLayerBridgePtr bridge;
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new CreateBridgeTask(&bridge, &mainMock, this, bridgeCreatedEvent.get()));
-    bridgeCreatedEvent->wait();
+    postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mainMock, this);
 
     // Register an alternate Logger for tracking hibernation events
     OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
@@ -1050,15 +976,13 @@
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new SetIsHiddenTask(bridge.get(), true));
+    postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
     hibernationStartedEvent->wait();
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
 
     // Rendering in the background -> temp switch to SW
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedWithSwitchToBackgroundRendering));
-    OwnPtr<WaitableEvent> switchEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new RenderingTask(bridge.get(), switchEvent.get()));
-    switchEvent->wait();
+    postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get());
     ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
     EXPECT_FALSE(bridge->isAccelerated());
     EXPECT_FALSE(bridge->isHibernating());
@@ -1071,9 +995,7 @@
 
     // Tear down the bridge on the thread so that 'bridge' can go out of scope
     // without crashing due to thread checks
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
-    testThread->taskRunner()->postTask(BLINK_FROM_HERE, new DestroyBridgeTask(&bridge, bridgeDestroyedEvent.get()));
-    bridgeDestroyedEvent->wait();
+    postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
index 2cb353f..f3e71a14 100644
--- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
@@ -341,19 +341,10 @@
 
 } // anonymous namespace
 
-#define DEFINE_TEST_TASK_WRAPPER_CLASS(TEST_METHOD)                                               \
-class TestWrapperTask_ ## TEST_METHOD : public WebTaskRunner::Task {                           \
-    public:                                                                                       \
-        TestWrapperTask_ ## TEST_METHOD(RecordingImageBufferSurfaceTest* test) : m_test(test) { } \
-        void run() override { m_test->TEST_METHOD(); }                                    \
-    private:                                                                                      \
-        RecordingImageBufferSurfaceTest* m_test;                                                  \
-};
-
 #define CALL_TEST_TASK_WRAPPER(TEST_METHOD)                                                               \
     {                                                                                                     \
         CurrentThreadPlatformMock ctpm;                                                                   \
-        Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE, new TestWrapperTask_ ## TEST_METHOD(this)); \
+        Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE, bind(&RecordingImageBufferSurfaceTest::TEST_METHOD, this)); \
         ctpm.enterRunLoop();                                      \
     }
 
@@ -367,22 +358,18 @@
     testNoFallbackWithClear();
 }
 
-DEFINE_TEST_TASK_WRAPPER_CLASS(testNonAnimatedCanvasUpdate)
 TEST_F(RecordingImageBufferSurfaceTest, testNonAnimatedCanvasUpdate)
 {
     CALL_TEST_TASK_WRAPPER(testNonAnimatedCanvasUpdate)
     expectDisplayListEnabled(true);
 }
 
-DEFINE_TEST_TASK_WRAPPER_CLASS(testAnimatedWithoutClear)
 TEST_F(RecordingImageBufferSurfaceTest, testAnimatedWithoutClear)
 {
     CALL_TEST_TASK_WRAPPER(testAnimatedWithoutClear)
     expectDisplayListEnabled(false);
 }
 
-DEFINE_TEST_TASK_WRAPPER_CLASS(testFrameFinalizedByTaskObserver1)
-DEFINE_TEST_TASK_WRAPPER_CLASS(testFrameFinalizedByTaskObserver2)
 TEST_F(RecordingImageBufferSurfaceTest, testFrameFinalizedByTaskObserver)
 {
     CALL_TEST_TASK_WRAPPER(testFrameFinalizedByTaskObserver1)
@@ -391,14 +378,12 @@
     expectDisplayListEnabled(false);
 }
 
-DEFINE_TEST_TASK_WRAPPER_CLASS(testAnimatedWithClear)
 TEST_F(RecordingImageBufferSurfaceTest, testAnimatedWithClear)
 {
     CALL_TEST_TASK_WRAPPER(testAnimatedWithClear)
     expectDisplayListEnabled(true);
 }
 
-DEFINE_TEST_TASK_WRAPPER_CLASS(testClearRect)
 TEST_F(RecordingImageBufferSurfaceTest, testClearRect)
 {
     CALL_TEST_TASK_WRAPPER(testClearRect);
diff --git a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp
index abd9b811..18583cc 100644
--- a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp
+++ b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp
@@ -8,9 +8,9 @@
 #include "base/trace_event/heap_profiler_allocation_register.h"
 #include "base/trace_event/trace_event_memory_overhead.h"
 #include "platform/heap/Handle.h"
+#include "platform/web_process_memory_dump_impl.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebMemoryAllocatorDump.h"
-#include "public/platform/WebProcessMemoryDump.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Threading.h"
 
@@ -109,7 +109,7 @@
 }
 
 BlinkGCMemoryDumpProvider::BlinkGCMemoryDumpProvider()
-    : m_currentProcessMemoryDump(adoptPtr(Platform::current()->createProcessMemoryDump()))
+    : m_currentProcessMemoryDump(adoptPtr(new WebProcessMemoryDumpImpl()))
     , m_isHeapProfilingEnabled(false)
 {
 }
diff --git a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProviderTest.cpp b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProviderTest.cpp
index cd4259a..12369461 100644
--- a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProviderTest.cpp
+++ b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProviderTest.cpp
@@ -4,8 +4,8 @@
 
 #include "platform/heap/BlinkGCMemoryDumpProvider.h"
 
+#include "platform/web_process_memory_dump_impl.h"
 #include "public/platform/Platform.h"
-#include "public/platform/WebProcessMemoryDump.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/Threading.h"
 
@@ -13,7 +13,7 @@
 
 TEST(BlinkGCDumpProviderTest, MemoryDump)
 {
-    OwnPtr<WebProcessMemoryDump> dump = adoptPtr(Platform::current()->createProcessMemoryDump());
+    OwnPtr<WebProcessMemoryDump> dump = adoptPtr(new WebProcessMemoryDumpImpl());
     ASSERT(dump);
     BlinkGCMemoryDumpProvider::instance()->onMemoryDump(WebMemoryDumpLevelOfDetail::Detailed, dump.get());
     ASSERT(dump->getMemoryAllocatorDump(String::format("blink_gc")));
diff --git a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
index 4882384..8665766 100644
--- a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
+++ b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
@@ -3,14 +3,51 @@
 // found in the LICENSE file.
 
 #include "platform/heap/CallbackStack.h"
+#include "wtf/PageAllocator.h"
 
 namespace blink {
 
+CallbackStack::Block::Block(Block* next)
+{
+    static_assert((blockSize * sizeof(Item)) % WTF::kPageAllocationGranularity == 0, "CallbackStack::blockSize * sizeof(Item) must be a multiple of WTF::kPageAllocationGranularity");
+    m_buffer = static_cast<Item*>(WTF::allocPages(nullptr, blockSize * sizeof(Item), WTF::kPageAllocationGranularity, WTF::PageAccessible));
+    RELEASE_ASSERT(m_buffer);
+
+#if ENABLE(ASSERT)
+    clear();
+#endif
+
+    m_limit = &(m_buffer[blockSize]);
+    m_current = &(m_buffer[0]);
+    m_next = next;
+}
+
+CallbackStack::Block::~Block()
+{
+    WTF::freePages(m_buffer, blockSize * sizeof(Item));
+    m_buffer = nullptr;
+    m_limit = nullptr;
+    m_current = nullptr;
+    m_next = nullptr;
+}
+
+#if ENABLE(ASSERT)
 void CallbackStack::Block::clear()
 {
+    for (size_t i = 0; i < blockSize; i++)
+        m_buffer[i] = Item(0, 0);
+}
+#endif
+
+void CallbackStack::Block::decommit()
+{
+#if ENABLE(ASSERT)
+    clear();
+#endif
+    WTF::discardSystemPages(m_buffer, blockSize * sizeof(Item));
+
     m_current = &m_buffer[0];
     m_next = nullptr;
-    clearUnused();
 }
 
 void CallbackStack::Block::invokeEphemeronCallbacks(Visitor* visitor)
@@ -35,34 +72,28 @@
 }
 #endif
 
-void CallbackStack::Block::clearUnused()
-{
-#if ENABLE(ASSERT)
-    for (size_t i = 0; i < blockSize; i++)
-        m_buffer[i] = Item(0, 0);
-#endif
-}
-
-CallbackStack::CallbackStack() : m_first(new Block(0)), m_last(m_first)
+CallbackStack::CallbackStack()
+    : m_first(new Block(0))
+    , m_last(m_first)
 {
 }
 
 CallbackStack::~CallbackStack()
 {
-    clear();
+    RELEASE_ASSERT(isEmpty());
     delete m_first;
     m_first = nullptr;
     m_last = nullptr;
 }
 
-void CallbackStack::clear()
+void CallbackStack::decommit()
 {
     Block* next;
     for (Block* current = m_first->next(); current; current = next) {
         next = current->next();
         delete current;
     }
-    m_first->clear();
+    m_first->decommit();
     m_last = m_first;
 }
 
diff --git a/third_party/WebKit/Source/platform/heap/CallbackStack.h b/third_party/WebKit/Source/platform/heap/CallbackStack.h
index 0d60ebc3..78256e8 100644
--- a/third_party/WebKit/Source/platform/heap/CallbackStack.h
+++ b/third_party/WebKit/Source/platform/heap/CallbackStack.h
@@ -41,6 +41,7 @@
     ~CallbackStack();
 
     void clear();
+    void decommit();
 
     Item* allocateEntry();
     Item* pop();
@@ -54,25 +55,18 @@
 #endif
 
 private:
-    static const size_t blockSize = 8192;
+    static const size_t blockSize = (1 << 13);
 
     class Block {
         USING_FAST_MALLOC(Block);
     public:
-        explicit Block(Block* next)
-            : m_limit(&(m_buffer[blockSize]))
-            , m_current(&(m_buffer[0]))
-            , m_next(next)
-        {
-            clearUnused();
-        }
+        explicit Block(Block* next);
+        ~Block();
 
-        ~Block()
-        {
-            clearUnused();
-        }
-
+#if ENABLE(ASSERT)
         void clear();
+#endif
+        void decommit();
 
         Block* next() const { return m_next; }
         void setNext(Block* next) { m_next = next; }
@@ -82,11 +76,6 @@
             return m_current == &(m_buffer[0]);
         }
 
-        size_t size() const
-        {
-            return blockSize - (m_limit - m_current);
-        }
-
         Item* allocateEntry()
         {
             if (LIKELY(m_current < m_limit))
@@ -107,9 +96,7 @@
 #endif
 
     private:
-        void clearUnused();
-
-        Item m_buffer[blockSize];
+        Item* m_buffer;
         Item* m_limit;
         Item* m_current;
         Block* m_next;
diff --git a/third_party/WebKit/Source/platform/heap/Heap.cpp b/third_party/WebKit/Source/platform/heap/Heap.cpp
index d998535..11ba827 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.cpp
+++ b/third_party/WebKit/Source/platform/heap/Heap.cpp
@@ -304,6 +304,14 @@
 }
 #endif
 
+void Heap::decommitCallbackStacks()
+{
+    s_markingStack->decommit();
+    s_postMarkingCallbackStack->decommit();
+    s_globalWeakCallbackStack->decommit();
+    s_ephemeronStack->decommit();
+}
+
 void Heap::preGC()
 {
     ASSERT(!ThreadState::current()->isInGC());
@@ -420,6 +428,7 @@
     WTF::Partitions::reportMemoryUsageHistogram();
 
     postGC(gcType);
+    Heap::decommitCallbackStacks();
 
 #if ENABLE(ASSERT)
     // 0 is used to figure non-assigned area, so avoid to use 0 in s_gcGeneration.
@@ -462,6 +471,7 @@
         globalWeakProcessing(visitorScope.visitor());
 
         state->postGC(BlinkGC::GCWithSweep);
+        Heap::decommitCallbackStacks();
     }
     state->preSweep();
 }
@@ -498,8 +508,6 @@
     //    if they are only reachable from their front objects.
     while (popAndInvokePostMarkingCallback(visitor)) { }
 
-    s_ephemeronStack->clear();
-
     // Post-marking callbacks should not trace any objects and
     // therefore the marking stack should be empty after the
     // post-marking callbacks.
diff --git a/third_party/WebKit/Source/platform/heap/Heap.h b/third_party/WebKit/Source/platform/heap/Heap.h
index eb9fcd65..9762d09 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.h
+++ b/third_party/WebKit/Source/platform/heap/Heap.h
@@ -319,6 +319,8 @@
     static int heapIndexForObjectSize(size_t);
     static bool isNormalHeapIndex(int);
 
+    static void decommitCallbackStacks();
+
     static CallbackStack* s_markingStack;
     static CallbackStack* s_postMarkingCallbackStack;
     static CallbackStack* s_globalWeakCallbackStack;
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
index 360938d..ce9f9f8 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
@@ -491,6 +491,8 @@
     // Perform thread-specific weak processing.
     while (popAndInvokeThreadLocalWeakCallback(visitorScope.visitor())) { }
 
+    m_threadLocalWeakCallbackStack->decommit();
+
     if (isMainThread()) {
         double timeForThreadLocalWeakProcessing = WTF::currentTimeMS() - startTime;
         DEFINE_STATIC_LOCAL(CustomCountHistogram, timeForWeakHistogram, ("BlinkGC.timeForThreadLocalWeakProcessing", 1, 10 * 1000, 50));
diff --git a/third_party/WebKit/Source/platform/network/HTTPParsers.h b/third_party/WebKit/Source/platform/network/HTTPParsers.h
index 58c66bc..bd15e88 100644
--- a/third_party/WebKit/Source/platform/network/HTTPParsers.h
+++ b/third_party/WebKit/Source/platform/network/HTTPParsers.h
@@ -97,6 +97,12 @@
 PLATFORM_EXPORT bool isValidHTTPToken(const String&);
 PLATFORM_EXPORT bool parseHTTPRefresh(const String& refresh, bool fromHttpEquivMeta, double& delay, String& url);
 PLATFORM_EXPORT double parseDate(const String&);
+
+// Given a Media Type (like "foo/bar; baz=gazonk" - usually from the
+// 'Content-Type' HTTP header), extract and return the "type/subtype" portion
+// ("foo/bar").
+// Note: This function does not in any way check that the "type/subtype" pair
+// is well-formed.
 PLATFORM_EXPORT AtomicString extractMIMETypeFromMediaType(const AtomicString&);
 PLATFORM_EXPORT String extractCharsetFromMediaType(const String&);
 PLATFORM_EXPORT void findCharsetInMediaType(const String& mediaType, unsigned& charsetPos, unsigned& charsetLen, unsigned start = 0);
diff --git a/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp b/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
index 2a750061..2349c27e 100644
--- a/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
+++ b/third_party/WebKit/Source/platform/network/HTTPParsersTest.cpp
@@ -133,4 +133,36 @@
     EXPECT_FALSE(blink::isValidHTTPFieldContentRFC7230(String(hiraganaA)));
 }
 
+TEST(HTTPParsersTest, ExtractMIMETypeFromMediaType)
+{
+    const AtomicString textHtml("text/html", AtomicString::ConstructFromLiteral);
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html; charset=iso-8859-1")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html ; charset=iso-8859-1")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,text/plain")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html , text/plain")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html\t,\ttext/plain")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString(" text/html   ")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\ttext/html \t")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("\r\ntext/html\r\n")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text/html,text/plain;charset=iso-8859-1")));
+    EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString(", text/html")));
+    EXPECT_EQ(emptyString(), extractMIMETypeFromMediaType(AtomicString("; text/html")));
+
+    // Preserves case.
+    EXPECT_EQ("tExt/hTMl", extractMIMETypeFromMediaType(AtomicString("tExt/hTMl")));
+
+    // If no normalization is required, the same AtomicString should be returned.
+    const AtomicString& passthrough = extractMIMETypeFromMediaType(textHtml);
+    EXPECT_EQ(textHtml.impl(), passthrough.impl());
+
+    // These tests cover current behavior, but are not necessarily
+    // expected/wanted behavior. (See FIXME in implementation.)
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text / html")));
+    // U+2003, EM SPACE (UTF-8: E2 80 83)
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString::fromUTF8("text\xE2\x80\x83/ html")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\r\n/\nhtml")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("text\n/\nhtml")));
+    EXPECT_EQ(textHtml, extractMIMETypeFromMediaType(AtomicString("t e x t / h t m l")));
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/network/ResourceRequest.cpp b/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
index 3601422..24fa32ae5 100644
--- a/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
+++ b/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
@@ -429,7 +429,10 @@
     m_requestContext = WebURLRequest::RequestContextUnspecified;
     m_frameType = WebURLRequest::FrameTypeNone;
     m_fetchRequestMode = WebURLRequest::FetchRequestModeNoCORS;
-    m_fetchCredentialsMode = WebURLRequest::FetchCredentialsModeInclude;
+    // Contrary to the Fetch spec, we default to same-origin mode here, and deal
+    // with CORS modes in updateRequestForAccessControl if we're called in a
+    // context which requires it.
+    m_fetchCredentialsMode = WebURLRequest::FetchCredentialsModeSameOrigin;
     m_fetchRedirectMode = WebURLRequest::FetchRedirectModeFollow;
     m_referrerPolicy = ReferrerPolicyDefault;
     m_loFiState = WebURLRequest::LoFiUnspecified;
diff --git a/third_party/WebKit/Source/platform/testing/DEPS b/third_party/WebKit/Source/platform/testing/DEPS
index ce8ac9d..378d13ad 100644
--- a/third_party/WebKit/Source/platform/testing/DEPS
+++ b/third_party/WebKit/Source/platform/testing/DEPS
@@ -4,4 +4,7 @@
     "+base/command_line.h",
     "+base/path_service.h",
     "+base/message_loop",
+    "+base/test/test_io_thread.h",
+    "+mojo/edk/embedder",
+    "+mojo/edk/test",
 ]
diff --git a/third_party/WebKit/Source/platform/testing/MessageLoopForMojo.h b/third_party/WebKit/Source/platform/testing/MessageLoopForMojo.h
new file mode 100644
index 0000000..3117ea0
--- /dev/null
+++ b/third_party/WebKit/Source/platform/testing/MessageLoopForMojo.h
@@ -0,0 +1,14 @@
+// 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 MessageLoopForMojo_h
+#define MessageLoopForMojo_h
+
+#include "base/message_loop/message_loop.h"
+
+// This file exists just in order to allow unittests to include
+// "base/message_loop/message_loop.h" indirectly without adding a line of
+// "+base/message_loop" in their DEPS file.
+
+#endif // MessageLoopForMojo_h
diff --git a/third_party/WebKit/Source/platform/testing/RunAllTests.cpp b/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
index 605fbef..69caa0039 100644
--- a/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
+++ b/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
@@ -28,6 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "base/test/test_io_thread.h"
+#include "mojo/edk/embedder/embedder.h"
+#include "mojo/edk/test/scoped_ipc_support.h"
 #include "platform/EventTracer.h"
 #include "platform/HTTPNames.h"
 #include "platform/heap/Heap.h"
@@ -43,20 +46,23 @@
 #include <base/test/launcher/unit_test_launcher.h>
 #include <base/test/test_suite.h>
 #include <cc/blink/web_compositor_support_impl.h>
-#include <string.h>
 
-static double dummyCurrentTime()
+namespace {
+
+double dummyCurrentTime()
 {
     return 0.0;
 }
 
-static int runTestSuite(base::TestSuite* testSuite)
+int runTestSuite(base::TestSuite* testSuite)
 {
     int result = testSuite->Run();
     blink::Heap::collectAllGarbage();
     return result;
 }
 
+} // namespace
+
 int main(int argc, char** argv)
 {
     base::CommandLine::Init(argc, argv);
@@ -79,6 +85,12 @@
     blink::HTTPNames::init();
 
     base::TestSuite testSuite(argc, argv);
+
+    mojo::edk::Init();
+    base::TestIOThread testIoThread(base::TestIOThread::kAutoStart);
+    WTF::OwnPtr<mojo::edk::test::ScopedIPCSupport> ipcSupport(
+        adoptPtr(new mojo::edk::test::ScopedIPCSupport(testIoThread.task_runner())));
+
     int result = base::LaunchUnitTests(argc, argv, base::Bind(runTestSuite, base::Unretained(&testSuite)));
 
     blink::ThreadState::detachMainThread();
diff --git a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
index 53124475..198e2777 100644
--- a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
+++ b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
@@ -30,6 +30,12 @@
 
 #include "platform/testing/TestingPlatformSupport.h"
 
+#if !OS(ANDROID)
+#include "device/battery/battery_monitor_impl.h"
+#endif
+
+#include <cstring>
+
 namespace blink {
 
 TestingDiscardableMemory::TestingDiscardableMemory(size_t size) : m_data(size), m_isLocked(true)
@@ -99,14 +105,27 @@
     return m_config.compositorSupport;
 }
 
+WebThread* TestingPlatformSupport::currentThread()
+{
+    return m_oldPlatform ? m_oldPlatform->currentThread() : nullptr;
+}
+
 WebUnitTestSupport* TestingPlatformSupport::unitTestSupport()
 {
     return m_oldPlatform ? m_oldPlatform->unitTestSupport() : nullptr;
 }
 
-WebThread* TestingPlatformSupport::currentThread()
+void TestingPlatformSupport::connectToRemoteService(const char* name, mojo::ScopedMessagePipeHandle handle)
 {
-    return m_oldPlatform ? m_oldPlatform->currentThread() : nullptr;
+#if !OS(ANDROID)
+    if (std::strcmp(name, device::BatteryMonitor::Name_) == 0) {
+        device::BatteryMonitorImpl::Create(
+            mojo::MakeRequest<device::BatteryMonitor>(std::move(handle)));
+        return;
+    }
+#endif
+
+    ASSERT_NOT_REACHED();
 }
 
 class TestingPlatformMockWebTaskRunner : public WebTaskRunner {
diff --git a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
index 319ea7f..7b7efbb 100644
--- a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
+++ b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
@@ -118,6 +118,9 @@
     WebCompositorSupport* compositorSupport() override;
     WebThread* currentThread() override;
     WebUnitTestSupport* unitTestSupport() override;
+    void registerMemoryDumpProvider(blink::WebMemoryDumpProvider*, const char* name) override {}
+    void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider*) override {}
+    void connectToRemoteService(const char* name, mojo::ScopedMessagePipeHandle) override;
 
 protected:
     const Config m_config;
diff --git a/third_party/WebKit/Source/platform/threading/BindForMojo.h b/third_party/WebKit/Source/platform/threading/BindForMojo.h
new file mode 100644
index 0000000..606c11b
--- /dev/null
+++ b/third_party/WebKit/Source/platform/threading/BindForMojo.h
@@ -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.
+
+#ifndef BindForMojo_h
+#define BindForMojo_h
+
+#include "base/bind.h"
+#include "mojo/public/cpp/bindings/callback.h"
+
+// This file provides limited access to base::Bind() function. base::Bind()
+// could be dangerous if it's used across threads, so we don't want to allow
+// general use of base::Bind().
+// See also "platform/ThreadSafeFunctional.h".
+
+namespace blink {
+
+// Binds an instance of a class to its member function. Does not bind anything
+// else.
+template <typename Class, typename ReturnType, typename... Args>
+mojo::Callback<ReturnType(Args...)>
+sameThreadBindForMojo(ReturnType (Class::*method)(Args...), Class* instance)
+{
+    return base::Bind(method, base::Unretained(instance));
+}
+
+} // namespace blink
+
+#endif // BindForMojo_h
diff --git a/third_party/WebKit/Source/platform/threading/DEPS b/third_party/WebKit/Source/platform/threading/DEPS
index ecbc3634..97bde77a 100644
--- a/third_party/WebKit/Source/platform/threading/DEPS
+++ b/third_party/WebKit/Source/platform/threading/DEPS
@@ -3,4 +3,5 @@
     # directories and files instead of writing 'base/'.
     "+base/bind.h",
     "+base/threading",
+    "+mojo/public/cpp/bindings/callback.h",
 ]
diff --git a/content/child/web_memory_allocator_dump_impl.cc b/third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.cc
similarity index 87%
rename from content/child/web_memory_allocator_dump_impl.cc
rename to third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.cc
index af9b57e..87dc692 100644
--- a/content/child/web_memory_allocator_dump_impl.cc
+++ b/third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/child/web_memory_allocator_dump_impl.h"
+#include "platform/web_memory_allocator_dump_impl.h"
 
 #include "base/trace_event/memory_allocator_dump.h"
 
-namespace content {
+namespace blink {
 
 WebMemoryAllocatorDumpImpl::WebMemoryAllocatorDumpImpl(
     base::trace_event::MemoryAllocatorDump* memory_allocator_dump)
@@ -35,7 +35,8 @@
   memory_allocator_dump_->AddString(name, units, value.utf8());
 }
 
-blink::WebMemoryAllocatorDumpGuid WebMemoryAllocatorDumpImpl::guid() const {
+WebMemoryAllocatorDumpGuid WebMemoryAllocatorDumpImpl::guid() const {
   return guid_;
 }
-}  // namespace content
+
+}  // namespace blink
diff --git a/content/child/web_memory_allocator_dump_impl.h b/third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.h
similarity index 82%
rename from content/child/web_memory_allocator_dump_impl.h
rename to third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.h
index d9724035..8e38baf 100644
--- a/content/child/web_memory_allocator_dump_impl.h
+++ b/third_party/WebKit/Source/platform/web_memory_allocator_dump_impl.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_CHILD_WEB_MEMORY_ALLOCATOR_DUMP_IMPL_H_
-#define CONTENT_CHILD_WEB_MEMORY_ALLOCATOR_DUMP_IMPL_H_
+#ifndef WebMemoryAllocatorDumpImpl_h
+#define WebMemoryAllocatorDumpImpl_h
 
 #include <stdint.h>
 
 #include "base/macros.h"
-#include "third_party/WebKit/public/platform/WebMemoryAllocatorDump.h"
+#include "public/platform/WebMemoryAllocatorDump.h"
 
 namespace base {
 namespace trace_event {
@@ -16,7 +16,7 @@
 }  // namespace base
 }  // namespace trace_event
 
-namespace content {
+namespace blink {
 
 // Implements the blink::WebMemoryAllocatorDump interface by means of proxying
 // the Add*() calls to the underlying base::trace_event::MemoryAllocatorDump
@@ -43,6 +43,6 @@
   DISALLOW_COPY_AND_ASSIGN(WebMemoryAllocatorDumpImpl);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_CHILD_WEB_MEMORY_ALLOCATOR_DUMP_IMPL_H_
+#endif  // WebMemoryAllocatorDumpImpl_h
diff --git a/content/child/web_memory_dump_provider_adapter.cc b/third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.cc
similarity index 85%
rename from content/child/web_memory_dump_provider_adapter.cc
rename to third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.cc
index 051f155..0a57107 100644
--- a/content/child/web_memory_dump_provider_adapter.cc
+++ b/third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/child/web_memory_dump_provider_adapter.h"
+#include "platform/web_memory_dump_provider_adapter.h"
 
 #include <stddef.h>
 
 #include "base/trace_event/trace_event_argument.h"
-#include "content/child/web_process_memory_dump_impl.h"
-#include "third_party/WebKit/public/platform/WebMemoryDumpProvider.h"
+#include "platform/web_process_memory_dump_impl.h"
+#include "public/platform/WebMemoryDumpProvider.h"
 
-namespace content {
+namespace blink {
 
 WebMemoryDumpProviderAdapter::WebMemoryDumpProviderAdapter(
     blink::WebMemoryDumpProvider* wmdp)
@@ -46,4 +46,4 @@
   web_memory_dump_provider_->onHeapProfilingEnabled(enabled);
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/child/web_memory_dump_provider_adapter.h b/third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.h
similarity index 87%
rename from content/child/web_memory_dump_provider_adapter.h
rename to third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.h
index b1c0813..6cb0d3c0 100644
--- a/content/child/web_memory_dump_provider_adapter.h
+++ b/third_party/WebKit/Source/platform/web_memory_dump_provider_adapter.h
@@ -2,17 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_CHILD_WEB_MEMORY_DUMP_PROVIDER_ADAPTER_H_
-#define CONTENT_CHILD_WEB_MEMORY_DUMP_PROVIDER_ADAPTER_H_
+#ifndef WebMemoryDumpProviderAdapter_h
+#define WebMemoryDumpProviderAdapter_h
 
 #include "base/macros.h"
 #include "base/trace_event/memory_dump_provider.h"
 
 namespace blink {
-class WebMemoryDumpProvider;
-}  // namespace blink
 
-namespace content {
+class WebMemoryDumpProvider;
 
 // Adapter class which makes it possible to register a WebMemoryDumpProvider (
 // from blink) to base::trace_event::MemoryDumpManager, which expects a
@@ -44,6 +42,6 @@
   DISALLOW_COPY_AND_ASSIGN(WebMemoryDumpProviderAdapter);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_CHILD_WEB_MEMORY_DUMP_PROVIDER_ADAPTER_H_
+#endif  // WebMemoryDumpProviderAdapter_h
diff --git a/content/child/web_process_memory_dump_impl.cc b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc
similarity index 90%
rename from content/child/web_process_memory_dump_impl.cc
rename to third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc
index c96c3f2b..fabd1092 100644
--- a/content/child/web_process_memory_dump_impl.cc
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump_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/child/web_process_memory_dump_impl.h"
+#include "platform/web_process_memory_dump_impl.h"
 
 #include <stddef.h>
 
@@ -12,10 +12,10 @@
 #include "base/trace_event/process_memory_dump.h"
 #include "base/trace_event/trace_event_argument.h"
 #include "base/trace_event/trace_event_memory_overhead.h"
-#include "content/child/web_memory_allocator_dump_impl.h"
+#include "platform/web_memory_allocator_dump_impl.h"
 #include "skia/ext/skia_trace_memory_dump_impl.h"
 
-namespace content {
+namespace blink {
 
 WebProcessMemoryDumpImpl::WebProcessMemoryDumpImpl()
     : owned_process_memory_dump_(
@@ -66,8 +66,8 @@
 
   // memory_allocator_dumps_ will take ownership of
   // |web_memory_allocator_dumpd_impl|.
-  memory_allocator_dumps_.set(memory_allocator_dump,
-                              make_scoped_ptr(web_memory_allocator_dump_impl));
+  memory_allocator_dumps_.set(
+      memory_allocator_dump, adoptPtr(web_memory_allocator_dump_impl));
   return web_memory_allocator_dump_impl;
 }
 
@@ -112,16 +112,15 @@
   // 2) Move and transfer the ownership of the WebMemoryAllocatorDump wrappers.
   const size_t expected_final_size = memory_allocator_dumps_.size() +
                                      other_impl->memory_allocator_dumps_.size();
-  while (!other_impl->memory_allocator_dumps_.empty()) {
+  while (!other_impl->memory_allocator_dumps_.isEmpty()) {
     auto first_entry = other_impl->memory_allocator_dumps_.begin();
     base::trace_event::MemoryAllocatorDump* memory_allocator_dump =
-        first_entry->first;
-    memory_allocator_dumps_.set(
-        memory_allocator_dump,
-        other_impl->memory_allocator_dumps_.take_and_erase(first_entry));
+        first_entry->key;
+    memory_allocator_dumps_.set(memory_allocator_dump,
+        other_impl->memory_allocator_dumps_.take(memory_allocator_dump));
   }
   DCHECK_EQ(expected_final_size, memory_allocator_dumps_.size());
-  DCHECK(other_impl->memory_allocator_dumps_.empty());
+  DCHECK(other_impl->memory_allocator_dumps_.isEmpty());
 }
 
 void WebProcessMemoryDumpImpl::addOwnershipEdge(
@@ -151,9 +150,10 @@
 
 SkTraceMemoryDump* WebProcessMemoryDumpImpl::createDumpAdapterForSkia(
     const blink::WebString& dump_name_prefix) {
-  sk_trace_dump_list_.push_back(new skia::SkiaTraceMemoryDumpImpl(
-      dump_name_prefix.utf8(), level_of_detail_, process_memory_dump_));
-  return sk_trace_dump_list_.back();
+  sk_trace_dump_list_.push_back(make_scoped_ptr(
+      new skia::SkiaTraceMemoryDumpImpl(
+          dump_name_prefix.utf8(), level_of_detail_, process_memory_dump_)));
+  return sk_trace_dump_list_.back().get();
 }
 
 blink::WebMemoryAllocatorDump*
diff --git a/content/child/web_process_memory_dump_impl.h b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h
similarity index 84%
rename from content/child/web_process_memory_dump_impl.h
rename to third_party/WebKit/Source/platform/web_process_memory_dump_impl.h
index 9e7b870..7775449 100644
--- a/content/child/web_process_memory_dump_impl.h
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h
@@ -2,17 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_CHILD_WEB_PROCESS_MEMORY_DUMP_IMPL_H_
-#define CONTENT_CHILD_WEB_PROCESS_MEMORY_DUMP_IMPL_H_
+#ifndef WebProcessMemoryDumpImpl_h
+#define WebProcessMemoryDumpImpl_h
 
-#include "base/containers/scoped_ptr_hash_map.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
 #include "base/trace_event/memory_dump_request_args.h"
-#include "content/common/content_export.h"
-#include "third_party/WebKit/public/platform/WebProcessMemoryDump.h"
+#include "public/platform/WebProcessMemoryDump.h"
+#include "wtf/HashMap.h"
+#include "wtf/OwnPtr.h"
+
+#include <map>
+#include <vector>
 
 namespace base {
 class DiscardableMemory;
@@ -26,14 +27,14 @@
 class SkiaTraceMemoryDumpImpl;
 }  // namespace skia
 
-namespace content {
+namespace blink {
 
 class WebMemoryAllocatorDumpImpl;
 
 // Implements the blink::WebProcessMemoryDump interface by means of proxying the
 // calls to createMemoryAllocatorDump() to the underlying
 // base::trace_event::ProcessMemoryDump instance.
-class CONTENT_EXPORT WebProcessMemoryDumpImpl final
+class PLATFORM_EXPORT WebProcessMemoryDumpImpl final
     : public NON_EXPORTED_BASE(blink::WebProcessMemoryDump) {
  public:
   // Creates a standalone WebProcessMemoryDumpImp, which owns the underlying
@@ -102,16 +103,15 @@
   // to the WebProcessMemoryDump passed as argument of the onMemoryDump() call.
   // Those pointers are valid only within the scope of the call and can be
   // safely torn down once the WebProcessMemoryDumpImpl itself is destroyed.
-  base::ScopedPtrHashMap<base::trace_event::MemoryAllocatorDump*,
-                         scoped_ptr<WebMemoryAllocatorDumpImpl>>
-      memory_allocator_dumps_;
+  HashMap<base::trace_event::MemoryAllocatorDump*,
+          OwnPtr<WebMemoryAllocatorDumpImpl>> memory_allocator_dumps_;
 
   // Stores SkTraceMemoryDump for the current ProcessMemoryDump.
-  ScopedVector<skia::SkiaTraceMemoryDumpImpl> sk_trace_dump_list_;
+  std::vector<scoped_ptr<skia::SkiaTraceMemoryDumpImpl>> sk_trace_dump_list_;
 
   DISALLOW_COPY_AND_ASSIGN(WebProcessMemoryDumpImpl);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_CHILD_WEB_PROCESS_MEMORY_DUMP_IMPL_H_
+#endif  // WebProcessMemoryDumpImpl_h
diff --git a/content/child/web_process_memory_dump_impl_unittest.cc b/third_party/WebKit/Source/platform/web_process_memory_dump_impl_test.cc
similarity index 96%
rename from content/child/web_process_memory_dump_impl_unittest.cc
rename to third_party/WebKit/Source/platform/web_process_memory_dump_impl_test.cc
index 98860ff3..fafb25bb 100644
--- a/content/child/web_process_memory_dump_impl_unittest.cc
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump_impl_test.cc
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/child/web_process_memory_dump_impl.h"
+#include "platform/web_process_memory_dump_impl.h"
 
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
-#include "content/child/web_memory_allocator_dump_impl.h"
+#include "platform/web_memory_allocator_dump_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/OwnPtr.h"
 
-namespace content {
+namespace blink {
 
 // Tests that the Chromium<>Blink plumbing that exposes the MemoryInfra classes
 // behaves correctly, performs the right transfers of memory ownerships and
@@ -121,4 +122,4 @@
   wpmd1.reset();
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py
index d1d734e..150fcd02 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py
@@ -115,7 +115,6 @@
         return 'wdiff'
 
     def _port_specific_expectations_files(self):
-        # FIXME: Delete this file once the 10.11 failures have been rebaselined or triaged.
-        if self._version == 'mac10.11':
-            return [self.host.filesystem.join(self.layout_tests_dir(), 'Mac10_11_Expectations')]
-        return []
+        # FIXME: Delete this file once the 10.11 failures have been rebaselined or triaged
+        # and we know why we're seeing failures on 10.9 and 10.10 ...
+        return [self.host.filesystem.join(self.layout_tests_dir(), 'Mac10_11_Expectations')]
diff --git a/third_party/WebKit/public/BUILD.gn b/third_party/WebKit/public/BUILD.gn
index ead9f2c..90bb8861 100644
--- a/third_party/WebKit/public/BUILD.gn
+++ b/third_party/WebKit/public/BUILD.gn
@@ -21,6 +21,20 @@
     ":blink_minimal",
     "//third_party/WebKit/Source/platform",
     "//third_party/WebKit/Source/web",
+
+    # public/platform/Platform.h in ':blink_headers' depends on Mojo APIs, and
+    # the dependent of this target needs to link Mojo.
+    "//mojo/public/c/system:for_component",
+  ]
+}
+
+group("blink_for_unittests") {
+  public_deps = [
+    ":blink",
+
+    # Since public/platform/Platform.h depends on Mojo APIs, unittests depending
+    # on :blink needs to link mojo/edk/system.
+    "//mojo/edk/system",
   ]
 }
 
diff --git a/third_party/WebKit/public/blink.gyp b/third_party/WebKit/public/blink.gyp
index a389b21..70d762c 100644
--- a/third_party/WebKit/public/blink.gyp
+++ b/third_party/WebKit/public/blink.gyp
@@ -39,6 +39,7 @@
             'dependencies': [
                 '../Source/platform/blink_platform.gyp:blink_platform',
                 '../Source/web/web.gyp:blink_web',
+                '<(DEPTH)/mojo/mojo_edk.gyp:mojo_system_impl',
                 'blink_headers.gyp:blink_headers',
                 'blink_minimal',
             ],
@@ -46,6 +47,10 @@
                 '../Source/web/web.gyp:blink_web',
                 '../Source/platform/blink_platform.gyp:blink_platform',
                 'blink_minimal',
+
+                # public/platform/Platform.h in 'blink_headers' depends on Mojo
+                # APIs, and the dependent of this target needs to link Mojo.
+                '<(DEPTH)/mojo/mojo_edk.gyp:mojo_system_impl',
             ],
         },
         {
diff --git a/third_party/WebKit/public/blink_headers.gypi b/third_party/WebKit/public/blink_headers.gypi
index 9096d5e..a6464a2 100644
--- a/third_party/WebKit/public/blink_headers.gypi
+++ b/third_party/WebKit/public/blink_headers.gypi
@@ -8,6 +8,7 @@
       "platform/Platform.h",
       "platform/FilePathConversion.h",
       "platform/URLConversion.h",
+      "platform/UserMetricsAction.h",
       "platform/WebApiKeyValidator.h",
       "platform/WebApplicationCacheHost.h",
       "platform/WebApplicationCacheHostClient.h",
@@ -16,8 +17,6 @@
       "platform/WebAudioDevice.h",
       "platform/WebAudioSourceProvider.h",
       "platform/WebAudioSourceProviderClient.h",
-      "platform/WebBatteryStatus.h",
-      "platform/WebBatteryStatusListener.h",
       "platform/WebBlendMode.h",
       "platform/WebBlobData.h",
       "platform/WebBlobInfo.h",
diff --git a/third_party/WebKit/public/platform/DEPS b/third_party/WebKit/public/platform/DEPS
index 129a74f..ef922f0 100644
--- a/third_party/WebKit/public/platform/DEPS
+++ b/third_party/WebKit/public/platform/DEPS
@@ -1,10 +1,12 @@
 include_rules = [
+    "+base/metrics",
     "+base/trace_event",
     "-bindings",
     "+cc",
     "-cc/blink",
     "-core",
     "-modules",
+    "+mojo/public",
     "+platform",
     "+platform/weborigin",
     "+public/platform",
diff --git a/third_party/WebKit/public/platform/Platform.h b/third_party/WebKit/public/platform/Platform.h
index a4b9fe7..72a3e18 100644
--- a/third_party/WebKit/public/platform/Platform.h
+++ b/third_party/WebKit/public/platform/Platform.h
@@ -35,8 +35,8 @@
 #include <windows.h>
 #endif
 
+#include "UserMetricsAction.h"
 #include "WebAudioDevice.h"
-#include "WebBatteryStatusListener.h"
 #include "WebCommon.h"
 #include "WebData.h"
 #include "WebDeviceLightListener.h"
@@ -53,6 +53,10 @@
 #include "WebString.h"
 #include "WebURLError.h"
 #include "WebVector.h"
+#include "base/metrics/user_metrics_action.h"
+
+#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/system/core.h"
 
 class GrContext;
 
@@ -409,15 +413,21 @@
     virtual void recordRappor(const char* metric, const WebString& sample) { }
     virtual void recordRapporURL(const char* metric, const blink::WebURL& url) { }
 
+    // Record a UMA sequence action.  The UserMetricsAction construction must
+    // be on a single line for extract_actions.py to find it.  Please see
+    // that script for more details.  Intended use is:
+    // recordAction(UserMetricsAction("MyAction"))
+    virtual void recordAction(const UserMetricsAction&) { }
+
     // Registers a memory dump provider. The WebMemoryDumpProvider::onMemoryDump
     // method will be called on the same thread that called the
     // registerMemoryDumpProvider() method. |name| is used for debugging
     // (duplicates are allowed) and must be a long-lived C string.
     // See crbug.com/458295 for design docs.
-    virtual void registerMemoryDumpProvider(blink::WebMemoryDumpProvider*, const char* name) { }
+    BLINK_PLATFORM_EXPORT virtual void registerMemoryDumpProvider(blink::WebMemoryDumpProvider*, const char* name);
 
     // Must be called on the thread that called registerMemoryDumpProvider().
-    virtual void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider*) { }
+    BLINK_PLATFORM_EXPORT virtual void unregisterMemoryDumpProvider(blink::WebMemoryDumpProvider*);
 
     class TraceLogEnabledStateObserver {
     public:
@@ -430,9 +440,6 @@
     virtual void addTraceLogEnabledStateObserver(TraceLogEnabledStateObserver*) {}
     virtual void removeTraceLogEnabledStateObserver(TraceLogEnabledStateObserver*) {}
 
-    // Returns a newly allocated WebProcessMemoryDump instance.
-    virtual blink::WebProcessMemoryDump* createProcessMemoryDump() { return nullptr; }
-
     typedef uint64_t WebMemoryAllocatorDumpGuid;
 
     // Returns guid corresponding to the given string (the hash value) for
@@ -506,6 +513,14 @@
     // Platform events -----------------------------------------------------
     // Device Orientation, Device Motion, Device Light, Battery, Gamepad.
 
+    // Connects the mojo handle to the remote service provider.
+    template <typename Interface>
+    void connectToRemoteService(mojo::InterfaceRequest<Interface> ptr)
+    {
+        connectToRemoteService(Interface::Name_, ptr.PassMessagePipe());
+    }
+    virtual void connectToRemoteService(const char* name, mojo::ScopedMessagePipeHandle handle) { }
+
     // Request the platform to start listening to the events of the specified
     // type and notify the given listener (if not null) when there is an update.
     virtual void startListening(WebPlatformEventType type, WebPlatformEventListener* listener) { }
diff --git a/third_party/WebKit/public/platform/UserMetricsAction.h b/third_party/WebKit/public/platform/UserMetricsAction.h
new file mode 100644
index 0000000..08a20221
--- /dev/null
+++ b/third_party/WebKit/public/platform/UserMetricsAction.h
@@ -0,0 +1,23 @@
+// 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 UserMetricsAction_h
+#define UserMetricsAction_h
+
+#include "WebNonCopyable.h"
+
+namespace blink {
+
+// WebKit equivalent to base::UserMetricsAction.  Included here so that it's
+// self-contained within WebKit.
+class UserMetricsAction : public WebNonCopyable {
+public:
+    explicit UserMetricsAction(const char* action) : m_action(action) {}
+    const char* action() const { return m_action; }
+private:
+    const char* const m_action;
+};
+
+} // namespace blink
+#endif
diff --git a/third_party/WebKit/public/platform/WebBatteryStatus.h b/third_party/WebKit/public/platform/WebBatteryStatus.h
deleted file mode 100644
index e6951fc..0000000
--- a/third_party/WebKit/public/platform/WebBatteryStatus.h
+++ /dev/null
@@ -1,30 +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 WebBatteryStatus_h
-#define WebBatteryStatus_h
-
-#include <limits>
-
-namespace blink {
-
-class WebBatteryStatus {
-public:
-    WebBatteryStatus()
-        : charging(true)
-        , chargingTime(0.0)
-        , dischargingTime(std::numeric_limits<double>::infinity())
-        , level(1.0)
-    {
-    }
-
-    bool charging;
-    double chargingTime;
-    double dischargingTime;
-    double level;
-};
-
-} // namespace blink
-
-#endif // WebBatteryStatus_h
diff --git a/third_party/WebKit/public/platform/WebBatteryStatusListener.h b/third_party/WebKit/public/platform/WebBatteryStatusListener.h
deleted file mode 100644
index decb807..0000000
--- a/third_party/WebKit/public/platform/WebBatteryStatusListener.h
+++ /dev/null
@@ -1,25 +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 WebBatteryStatusListener_h
-#define WebBatteryStatusListener_h
-
-#include "WebBatteryStatus.h"
-#include "WebPlatformEventListener.h"
-
-namespace blink {
-
-class WebBatteryStatus;
-
-class WebBatteryStatusListener : public WebPlatformEventListener {
-public:
-    // This method is called when a new battery status is available.
-    virtual void updateBatteryStatus(const WebBatteryStatus&) = 0;
-
-    virtual ~WebBatteryStatusListener() { }
-};
-
-} // namespace blink
-
-#endif // WebBatteryStatusListener_h
diff --git a/third_party/WebKit/public/platform/WebPlatformEventType.h b/third_party/WebKit/public/platform/WebPlatformEventType.h
index d31d369..da463dd1 100644
--- a/third_party/WebKit/public/platform/WebPlatformEventType.h
+++ b/third_party/WebKit/public/platform/WebPlatformEventType.h
@@ -12,7 +12,6 @@
     WebPlatformEventTypeDeviceOrientation,
     WebPlatformEventTypeDeviceOrientationAbsolute,
     WebPlatformEventTypeDeviceLight,
-    WebPlatformEventTypeBattery,
     WebPlatformEventTypeGamepad,
     WebPlatformEventTypeScreenOrientation
 };
diff --git a/third_party/WebKit/public/platform/WebProcessMemoryDump.h b/third_party/WebKit/public/platform/WebProcessMemoryDump.h
index 2940329..432ab947 100644
--- a/third_party/WebKit/public/platform/WebProcessMemoryDump.h
+++ b/third_party/WebKit/public/platform/WebProcessMemoryDump.h
@@ -14,6 +14,9 @@
 class SkTraceMemoryDump;
 
 namespace base {
+
+class DiscardableMemory;
+
 namespace trace_event {
 
 class ProcessMemoryDump;
@@ -114,6 +117,12 @@
         return nullptr;
     }
 
+    virtual blink::WebMemoryAllocatorDump* createDiscardableMemoryAllocatorDump(const std::string& name, base::DiscardableMemory* discardable)
+    {
+        BLINK_ASSERT_NOT_REACHED();
+        return nullptr;
+    }
+
     // Dumps heap memory usage. |allocatorName| is used as an absolute name for
     // base::trace_event::ProcessMemoryDump::AddHeapDump.
     virtual void dumpHeapUsage(const base::hash_map<base::trace_event::AllocationContext, size_t>& bytesByContext, base::trace_event::TraceEventMemoryOverhead& overhead, const char* allocatorName)
diff --git a/third_party/libjingle/README.chromium b/third_party/libjingle/README.chromium
index 48b86cd8..4abaaf03 100644
--- a/third_party/libjingle/README.chromium
+++ b/third_party/libjingle/README.chromium
@@ -1,7 +1,7 @@
 Name: libjingle
 URL: http://www.webrtc.org
 Version: unknown
-Revision: 11592
+Revision: 11754
 License: BSD
 License File: source/talk/COPYING
 Security Critical: yes
diff --git a/third_party/libjingle/libjingle_nacl.gyp b/third_party/libjingle/libjingle_nacl.gyp
index 68b5bdc1..9fb677a 100644
--- a/third_party/libjingle/libjingle_nacl.gyp
+++ b/third_party/libjingle/libjingle_nacl.gyp
@@ -163,6 +163,8 @@
         '<(webrtc_base)/sha1.cc',
         '<(webrtc_base)/sha1.h',
         '<(webrtc_base)/sha1digest.h',
+        '<(webrtc_base)/sharedexclusivelock.cc',
+        '<(webrtc_base)/sharedexclusivelock.h',
         '<(webrtc_base)/signalthread.cc',
         '<(webrtc_base)/signalthread.h',
         '<(webrtc_base)/sigslot.cc',
diff --git a/tools/android/loading/loading_model.py b/tools/android/loading/loading_model.py
index 923183e..d929ac4f 100644
--- a/tools/android/loading/loading_model.py
+++ b/tools/android/loading/loading_model.py
@@ -203,11 +203,11 @@
       costs[n.Index()] = cost
     max_cost = max(costs)
     if costs_out is not None:
-      del costs_out[:-1]
+      del costs_out[:]
       costs_out.extend(costs)
     assert max_cost > 0  # Otherwise probably the filter went awry.
     if path_list is not None:
-      del path_list[:-1]
+      del path_list[:]
       n = (i for i in self._nodes if costs[i.Index()] == max_cost).next()
       path_list.append(self._node_info[n.Index()])
       while n.Predecessors():
diff --git a/tools/android/loading/options.py b/tools/android/loading/options.py
index a11b56c..ec295ac 100644
--- a/tools/android/loading/options.py
+++ b/tools/android/loading/options.py
@@ -62,11 +62,11 @@
     """
     self._ARGS.append((arg_name, default, help_str))
 
-  def ParseArgs(self, arg_str, description=None, extra=None):
+  def ParseArgs(self, arg_list, description=None, extra=None):
     """Parse command line arguments.
 
     Args:
-      arg_str: command line argument string.
+      arg_list: command line argument list.
       description: description to use in argument parser.
       extra: additional required arguments to add. These will be exposed as
         instance attributes. This is either a list of extra arguments, or a
@@ -75,7 +75,46 @@
         used as in argparse, ie those beginning with -- are named, and those
         without a dash are positional. Don't use a single dash.
     """
-    parser = argparse.ArgumentParser(description=description)
+    parser = self._MakeParser(description, extra)
+    self._parsed_args = parser.parse_args(arg_list)
+
+  def ExtractArgs(self, arg_list):
+    """Extract arguments from arg_str.
+
+    Args:
+      arg_list: command line argument list. It will be changed so that arguments
+        used by this options instance are removed.
+    """
+    parser = self._MakeParser()
+    (self._parsed_args, unused) = parser.parse_known_args(arg_list)
+    del arg_list[:]
+    arg_list.extend(unused)
+
+  def GetParentParser(self, group_name='Global'):
+    """Returns a parser suitable for passing in as a parent to argparse.
+
+    Args:
+      group_name: A group name for the parser (see argparse's
+        add_argument_group).
+
+    Returns:
+      An argparse parser instance.
+    """
+    return self._MakeParser(group=group_name)
+
+  def SetParsedArgs(self, parsed_args):
+    """Set parsed args. Used with GetParentParser.
+
+    Args:
+      parsed_args: the result of argparse.parse_args or similar.
+    """
+    self._parsed_args = parsed_args
+
+  def _MakeParser(self, description=None, extra=None, group=None):
+    add_help = True if group is None else False
+    parser = argparse.ArgumentParser(
+        description=description, add_help=add_help)
+    container = parser if group is None else parser.add_argument_group(group)
     for arg, default, help_str in self._ARGS:
       # All global options are named.
       arg = '--' + arg
@@ -86,12 +125,12 @@
       for arg in extra:
         if type(arg) is tuple:
           argname, default = arg
-          self._AddArg(parser, argname, default)
+          self._AddArg(container, argname, default)
         else:
-          self._AddArg(parser, arg, None, required=True)
-    self._parsed_args = parser.parse_args(arg_str)
+          self._AddArg(container, arg, None, required=True)
+    return parser
 
-  def _AddArg(self, parser, arg, default, required=False, help_str=None):
+  def _AddArg(self, container, arg, default, required=False, help_str=None):
     assert not arg.startswith('-') or arg.startswith('--'), \
         "Single dash arguments aren't supported: %s" % arg
     arg_name = arg
@@ -117,7 +156,7 @@
         kwargs['default'] = default
         kwargs['type'] = type(default)
 
-    parser.add_argument(arg, **kwargs)
+    container.add_argument(arg, **kwargs)
 
   def __getattr__(self, name):
     if name in self._arg_set:
diff --git a/tools/android/loading/options_unittest.py b/tools/android/loading/options_unittest.py
new file mode 100644
index 0000000..9ecca66
--- /dev/null
+++ b/tools/android/loading/options_unittest.py
@@ -0,0 +1,32 @@
+# 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.
+
+import argparse
+import unittest
+
+import options
+
+
+class OptionsTestCase(unittest.TestCase):
+  def testExtract(self):
+    args = ['--A', 'foo', '--devtools_port', '2000', '--B=20',
+            '--no_sandbox', '--C', '30', 'baz']
+    opts = options.Options()
+    opts.ExtractArgs(args)
+    self.assertEqual(['--A', 'foo', '--B=20', '--C', '30', 'baz'], args)
+    self.assertEqual(2000, opts.devtools_port)
+    self.assertTrue(opts.no_sandbox)
+
+  def testParent(self):
+    opts = options.Options()
+    parser = argparse.ArgumentParser(parents=[opts.GetParentParser()])
+    parser.add_argument('--foo', type=int)
+    parsed_args = parser.parse_args(['--foo=4', '--devtools_port', '2000'])
+    self.assertEqual(4, parsed_args.foo)
+    opts.SetParsedArgs(parsed_args)
+    self.assertEqual(2000, opts.devtools_port)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/tools/android/loading/run_sandwich.py b/tools/android/loading/run_sandwich.py
index ff98acb9..c337b8b 100755
--- a/tools/android/loading/run_sandwich.py
+++ b/tools/android/loading/run_sandwich.py
@@ -95,41 +95,283 @@
     shutil.rmtree(directory_path)
 
 
-def _ArgumentParser():
-  """Build a command line argument's parser.
+class SandwichRunner(object):
+  """Sandwich runner.
+
+  This object is meant to be configured first and then run using the Run()
+  method. The runner can configure itself conveniently with parsed arguement
+  using the PullConfigFromArgs() method. The only job is to make sure that the
+  command line flags have `dest` parameter set to existing runner members.
   """
+
+  def __init__(self, job_name):
+    """Configures a sandwich runner out of the box.
+
+    Public members are meant to be configured as wished before calling Run().
+
+    Args:
+      job_name: The job name to get the associated urls.
+    """
+    # Cache operation to do before doing the chrome navigation.
+    #   Can be: clear,save,push,reload
+    self.cache_operation = 'clear'
+
+    # The cache archive's path to save to or push from. Is str or None.
+    self.cache_archive_path = None
+
+    # Controls whether the WPR server should do script injection.
+    self.disable_wpr_script_injection = False
+
+    # The job name. Is str.
+    self.job_name = job_name
+
+    # Number of times to repeat the job.
+    self.job_repeat = 1
+
+    # Network conditions to emulate. None if no emulation.
+    self.network_condition = None
+
+    # Network condition emulator. Can be: browser,wpr
+    self.network_emulator = 'browser'
+
+    # Output directory where to save the traces. Is str or None.
+    self.trace_output_directory = None
+
+    # List of urls to run.
+    self.urls = _ReadUrlsFromJobDescription(job_name)
+
+    # Path to the WPR archive to load or save. Is str or None.
+    self.wpr_archive_path = None
+
+    # Configures whether the WPR archive should be read or generated.
+    self.wpr_record = False
+
+    self._device = None
+    self._chrome_additional_flags = []
+    self._local_cache_directory_path = None
+
+  def PullConfigFromArgs(self, args):
+    """Configures the sandwich runner from parsed command line argument.
+
+    Args:
+      args: The command line parsed argument.
+    """
+    for config_name in self.__dict__.keys():
+      if config_name in args.__dict__:
+        self.__dict__[config_name] = args.__dict__[config_name]
+
+  def PrintConfig(self):
+    """Print the current sandwich runner configuration to stdout. """
+    for config_name in sorted(self.__dict__.keys()):
+      if config_name[0] != '_':
+        print '{} = {}'.format(config_name, self.__dict__[config_name])
+
+  def _CleanTraceOutputDirectory(self):
+    assert self.trace_output_directory
+    if not os.path.isdir(self.trace_output_directory):
+      try:
+        os.makedirs(self.trace_output_directory)
+      except OSError:
+        logging.error('Cannot create directory for results: %s',
+            self.trace_output_directory)
+        raise
+    else:
+      _CleanPreviousTraces(self.trace_output_directory)
+
+  def _SaveRunInfos(self, urls):
+    assert self.trace_output_directory
+    run_infos = {
+      'cache-op': self.cache_operation,
+      'job_name': self.job_name,
+      'urls': urls
+    }
+    with open(os.path.join(self.trace_output_directory, 'run_infos.json'),
+              'w') as file_output:
+      json.dump(run_infos, file_output, indent=2)
+
+  def _GetEmulatorNetworkCondition(self, emulator):
+    if self.network_emulator == emulator:
+      return self.network_condition
+    return None
+
+  def _RunNavigation(self, url, clear_cache, trace_id=None):
+    with device_setup.DeviceConnection(
+        device=self._device,
+        additional_flags=self._chrome_additional_flags) as connection:
+      additional_metadata = {}
+      if self._GetEmulatorNetworkCondition('browser'):
+        additional_metadata = chrome_setup.SetUpEmulationAndReturnMetadata(
+            connection=connection,
+            emulated_device_name=None,
+            emulated_network_name=self._GetEmulatorNetworkCondition('browser'))
+      loading_trace = trace_recorder.MonitorUrl(
+          connection, url,
+          clear_cache=clear_cache,
+          categories=pull_sandwich_metrics.CATEGORIES,
+          timeout=_DEVTOOLS_TIMEOUT)
+      loading_trace.metadata.update(additional_metadata)
+      if trace_id != None and self.trace_output_directory:
+        loading_trace_path = os.path.join(
+            self.trace_output_directory, str(trace_id), 'trace.json')
+        os.makedirs(os.path.dirname(loading_trace_path))
+        loading_trace.ToJsonFile(loading_trace_path)
+
+  def _RunUrl(self, url, trace_id=0):
+    clear_cache = False
+    if self.cache_operation == 'clear':
+      clear_cache = True
+    elif self.cache_operation == 'push':
+      self._device.KillAll(OPTIONS.chrome_package_name, quiet=True)
+      chrome_cache.PushBrowserCache(self._device,
+                                    self._local_cache_directory_path)
+    elif self.cache_operation == 'reload':
+      self._RunNavigation(url, clear_cache=True)
+    elif self.cache_operation == 'save':
+      clear_cache = trace_id == 0
+    self._RunNavigation(url, clear_cache=clear_cache, trace_id=trace_id)
+
+  def _PullCacheFromDevice(self):
+    assert self.cache_operation == 'save'
+    assert self.cache_archive_path, 'Need to specify where to save the cache'
+
+    # Move Chrome to background to allow it to flush the index.
+    self._device.adb.Shell('am start com.google.android.launcher')
+    time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS)
+    self._device.KillAll(OPTIONS.chrome_package_name, quiet=True)
+    time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS)
+
+    cache_directory_path = chrome_cache.PullBrowserCache(self._device)
+    chrome_cache.ZipDirectoryContent(
+        cache_directory_path, self.cache_archive_path)
+    shutil.rmtree(cache_directory_path)
+
+  def Run(self):
+    """SandwichRunner main entry point meant to be called once configured.
+    """
+    if self.trace_output_directory:
+      self._CleanTraceOutputDirectory()
+
+    self._device = device_utils.DeviceUtils.HealthyDevices()[0]
+    self._chrome_additional_flags = []
+
+    assert self._local_cache_directory_path == None
+    if self.cache_operation == 'push':
+      assert os.path.isfile(self.cache_archive_path)
+      self._local_cache_directory_path = tempfile.mkdtemp(suffix='.cache')
+      chrome_cache.UnzipDirectoryContent(
+          self.cache_archive_path, self._local_cache_directory_path)
+
+    ran_urls = []
+    with device_setup.WprHost(self._device, self.wpr_archive_path,
+        record=self.wpr_record,
+        network_condition_name=self._GetEmulatorNetworkCondition('wpr'),
+        disable_script_injection=self.disable_wpr_script_injection
+        ) as additional_flags:
+      self._chrome_additional_flags.extend(additional_flags)
+      for _ in xrange(self.job_repeat):
+        for url in self.urls:
+          self._RunUrl(url, trace_id=len(ran_urls))
+          ran_urls.append(url)
+
+    if self._local_cache_directory_path:
+      shutil.rmtree(self._local_cache_directory_path)
+      self._local_cache_directory_path = None
+    if self.cache_operation == 'save':
+      self._PullCacheFromDevice()
+    if self.trace_output_directory:
+      self._SaveRunInfos(ran_urls)
+
+
+def _ArgumentParser():
+  """Build a command line argument's parser."""
   parser = argparse.ArgumentParser()
   parser.add_argument('--job', required=True,
                       help='JSON file with job description.')
-  parser.add_argument('--output', required=True,
-                      help='Name of output directory to create.')
-  parser.add_argument('--repeat', default=1, type=int,
-                      help='How many times to run the job')
-  parser.add_argument('--cache-op',
-                      choices=['clear', 'save', 'push', 'reload'],
-                      default='clear',
-                      help='Configures cache operation to do before launching '
-                          +'Chrome. (Default is clear).')
-  parser.add_argument('--wpr-archive', default=None, type=str,
-                      help='Web page replay archive to load job\'s urls from.')
-  parser.add_argument('--wpr-record', default=False, action='store_true',
-                      help='Record web page replay archive.')
-  parser.add_argument('--disable-wpr-script-injection', default=False,
-                      action='store_true',
-                      help='Disable WPR default script injection such as ' +
-                          'overriding javascript\'s Math.random() and Date() ' +
-                          'with deterministic implementations.')
-  parser.add_argument('--network-condition', default=None,
+  subparsers = parser.add_subparsers(dest='subcommand', help='subcommand line')
+
+  # Record WPR subcommand.
+  record_wpr = subparsers.add_parser('record-wpr',
+                                     help='Record WPR from sandwich job.')
+  record_wpr.add_argument('--wpr-archive', required=True, type=str,
+                          dest='wpr_archive_path',
+                          help='Web page replay archive to generate.')
+
+  # Create cache subcommand.
+  create_cache_parser = subparsers.add_parser('create-cache',
+      help='Create cache from sandwich job.')
+  create_cache_parser.add_argument('--cache-archive', required=True, type=str,
+                                   dest='cache_archive_path',
+                                   help='Cache archive destination path.')
+  create_cache_parser.add_argument('--wpr-archive', default=None, type=str,
+                                   dest='wpr_archive_path',
+                                   help='Web page replay archive to create ' +
+                                       'the cache from.')
+
+  # Run subcommand.
+  run_parser = subparsers.add_parser('run', help='Run sandwich benchmark.')
+  run_parser.add_argument('--output', required=True, type=str,
+                          dest='trace_output_directory',
+                          help='Path of output directory to create.')
+  run_parser.add_argument('--cache-archive', type=str,
+                          dest='cache_archive_path',
+                          help='Cache archive destination path.')
+  run_parser.add_argument('--cache-op',
+                          choices=['clear', 'push', 'reload'],
+                          dest='cache_operation',
+                          default='clear',
+                          help='Configures cache operation to do before '
+                              +'launching Chrome. (Default is clear). The push'
+                              +' cache operation requires --cache-archive to '
+                              +'set.')
+  run_parser.add_argument('--disable-wpr-script-injection',
+                          action='store_true',
+                          help='Disable WPR default script injection such as ' +
+                              'overriding javascript\'s Math.random() and ' +
+                              'Date() with deterministic implementations.')
+  run_parser.add_argument('--network-condition', default=None,
       choices=sorted(chrome_setup.NETWORK_CONDITIONS.keys()),
       help='Set a network profile.')
-  parser.add_argument('--network-emulator', default='browser',
+  run_parser.add_argument('--network-emulator', default='browser',
       choices=['browser', 'wpr'],
       help='Set which component is emulating the network condition.' +
-          ' (Default to browser)')
+          ' (Default to browser). Wpr network emulator requires --wpr-archive' +
+          ' to be set.')
+  run_parser.add_argument('--job-repeat', default=1, type=int,
+                          help='How many times to run the job.')
+  run_parser.add_argument('--wpr-archive', default=None, type=str,
+                          dest='wpr_archive_path',
+                          help='Web page replay archive to load job\'s urls ' +
+                              'from.')
   return parser
 
 
-def main():
+def _RecordWprMain(args):
+  sandwich_runner = SandwichRunner(args.job)
+  sandwich_runner.PullConfigFromArgs(args)
+  sandwich_runner.wpr_record = True
+  sandwich_runner.PrintConfig()
+  sandwich_runner.Run()
+  return 0
+
+
+def _CreateCacheMain(args):
+  sandwich_runner = SandwichRunner(args.job)
+  sandwich_runner.PullConfigFromArgs(args)
+  sandwich_runner.cache_operation = 'save'
+  sandwich_runner.PrintConfig()
+  sandwich_runner.Run()
+  return 0
+
+
+def _RunJobMain(args):
+  sandwich_runner = SandwichRunner(args.job)
+  sandwich_runner.PullConfigFromArgs(args)
+  sandwich_runner.PrintConfig()
+  sandwich_runner.Run()
+  return 0
+
+
+def main(command_line_args):
   logging.basicConfig(level=logging.INFO)
   devil_chromium.Initialize()
 
@@ -137,102 +379,16 @@
   # the default values of OPTIONS.
   OPTIONS.ParseArgs([])
 
-  args = _ArgumentParser().parse_args()
+  args = _ArgumentParser().parse_args(command_line_args)
 
-  if not os.path.isdir(args.output):
-    try:
-      os.makedirs(args.output)
-    except OSError:
-      logging.error('Cannot create directory for results: %s' % args.output)
-      raise
-  else:
-    _CleanPreviousTraces(args.output)
-
-  run_infos = {
-    'cache-op': args.cache_op,
-    'job': args.job,
-    'urls': []
-  }
-  job_urls = _ReadUrlsFromJobDescription(args.job)
-  device = device_utils.DeviceUtils.HealthyDevices()[0]
-  local_cache_archive_path = os.path.join(args.output, 'cache.zip')
-  local_cache_directory_path = None
-  wpr_network_condition_name = None
-  browser_network_condition_name = None
-  if args.network_emulator == 'wpr':
-    wpr_network_condition_name = args.network_condition
-  elif args.network_emulator == 'browser':
-    browser_network_condition_name = args.network_condition
-  else:
-    assert False
-
-  if args.cache_op == 'push':
-    assert os.path.isfile(local_cache_archive_path)
-    local_cache_directory_path = tempfile.mkdtemp(suffix='.cache')
-    chrome_cache.UnzipDirectoryContent(
-        local_cache_archive_path, local_cache_directory_path)
-
-  with device_setup.WprHost(device, args.wpr_archive,
-      record=args.wpr_record,
-      network_condition_name=wpr_network_condition_name,
-      disable_script_injection=args.disable_wpr_script_injection
-      ) as additional_flags:
-    def _RunNavigation(url, clear_cache, trace_id):
-      with device_setup.DeviceConnection(
-          device=device,
-          additional_flags=additional_flags) as connection:
-        additional_metadata = {}
-        if browser_network_condition_name:
-          additional_metadata = chrome_setup.SetUpEmulationAndReturnMetadata(
-              connection=connection,
-              emulated_device_name=None,
-              emulated_network_name=browser_network_condition_name)
-        loading_trace = trace_recorder.MonitorUrl(
-            connection, url,
-            clear_cache=clear_cache,
-            categories=pull_sandwich_metrics.CATEGORIES,
-            timeout=_DEVTOOLS_TIMEOUT)
-        loading_trace.metadata.update(additional_metadata)
-        if trace_id != None:
-          loading_trace_path = os.path.join(
-              args.output, str(trace_id), 'trace.json')
-          os.makedirs(os.path.dirname(loading_trace_path))
-          loading_trace.ToJsonFile(loading_trace_path)
-
-    for _ in xrange(args.repeat):
-      for url in job_urls:
-        clear_cache = False
-        if args.cache_op == 'clear':
-          clear_cache = True
-        elif args.cache_op == 'push':
-          device.KillAll(OPTIONS.chrome_package_name, quiet=True)
-          chrome_cache.PushBrowserCache(device, local_cache_directory_path)
-        elif args.cache_op == 'reload':
-          _RunNavigation(url, clear_cache=True, trace_id=None)
-        elif args.cache_op == 'save':
-          clear_cache = not run_infos['urls']
-        _RunNavigation(url, clear_cache=clear_cache,
-                       trace_id=len(run_infos['urls']))
-        run_infos['urls'].append(url)
-
-  if local_cache_directory_path:
-    shutil.rmtree(local_cache_directory_path)
-
-  if args.cache_op == 'save':
-    # Move Chrome to background to allow it to flush the index.
-    device.adb.Shell('am start com.google.android.launcher')
-    time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS)
-    device.KillAll(OPTIONS.chrome_package_name, quiet=True)
-    time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS)
-
-    cache_directory_path = chrome_cache.PullBrowserCache(device)
-    chrome_cache.ZipDirectoryContent(
-        cache_directory_path, local_cache_archive_path)
-    shutil.rmtree(cache_directory_path)
-
-  with open(os.path.join(args.output, 'run_infos.json'), 'w') as file_output:
-    json.dump(run_infos, file_output, indent=2)
+  if args.subcommand == 'record-wpr':
+    return _RecordWprMain(args)
+  if args.subcommand == 'create-cache':
+    return _CreateCacheMain(args)
+  if args.subcommand == 'run':
+    return _RunJobMain(args)
+  assert False
 
 
 if __name__ == '__main__':
-  sys.exit(main())
+  sys.exit(main(sys.argv[1:]))
diff --git a/tools/android/loading/wpr_backend.py b/tools/android/loading/wpr_backend.py
new file mode 100644
index 0000000..c3a84a11
--- /dev/null
+++ b/tools/android/loading/wpr_backend.py
@@ -0,0 +1,124 @@
+# 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.
+
+"""Opens and modifies WPR archive.
+"""
+
+import collections
+import os
+import re
+import sys
+
+
+_SRC_DIR = os.path.abspath(os.path.join(
+    os.path.dirname(__file__), '..', '..', '..'))
+
+_WEBPAGEREPLAY_DIR = os.path.join(_SRC_DIR, 'third_party', 'webpagereplay')
+_WEBPAGEREPLAY_HTTPARCHIVE = os.path.join(_WEBPAGEREPLAY_DIR, 'httparchive.py')
+
+sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'webpagereplay'))
+import httparchive
+
+# Regex used to parse httparchive.py stdout's when listing all urls.
+_PARSE_WPR_REQUEST_REGEX = re.compile(r'^\S+\s+(?P<url>\S+)')
+
+
+class WprUrlEntry(object):
+  """Wpr url entry holding request and response infos. """
+
+  def __init__(self, wpr_request, wpr_response):
+    self._wpr_response = wpr_response
+    self.url = self._ExtractUrl(str(wpr_request))
+
+  def GetResponseHeadersDict(self):
+    """Get a copied dictionary of available headers.
+
+    Returns:
+      dict(name -> value)
+    """
+    headers = collections.defaultdict(list)
+    for (key, value) in self._wpr_response.headers:
+      headers[key].append(value)
+    return {k: ','.join(v) for (k, v) in headers.items()}
+
+  def SetResponseHeader(self, name, value):
+    """Set a header value.
+
+    In the case where the <name> response header is present more than once
+    in the response header list, then the given value is set only to the first
+    occurrence of that given headers, and the next ones are removed.
+
+    Args:
+      name: The name of the response header to set.
+      value: The value of the response header to set.
+    """
+    new_headers = []
+    new_header_set = False
+    for header in self._wpr_response.headers:
+      if header[0] != name:
+        new_headers.append(header)
+      elif not new_header_set:
+        new_header_set = True
+        new_headers.append((name, value))
+    if new_header_set:
+      self._wpr_response.headers = new_headers
+    else:
+      self._wpr_response.headers.append((name, value))
+
+  def DeleteResponseHeader(self, name):
+    """Delete a header.
+
+    In the case where the <name> response header is present more than once
+    in the response header list, this method takes care of removing absolutely
+    all them.
+
+    Args:
+      name: The name of the response header field to delete.
+    """
+    self._wpr_response.headers = \
+        [x for x in self._wpr_response.headers if x[0] != name]
+
+  @classmethod
+  def _ExtractUrl(cls, request_string):
+    match = _PARSE_WPR_REQUEST_REGEX.match(request_string)
+    assert match, 'Looks like there is an issue with: {}'.format(request_string)
+    return match.group('url')
+
+
+class WprArchiveBackend(object):
+  """WPR archive back-end able to read and modify. """
+
+  def __init__(self, wpr_archive_path):
+    """Constructor:
+
+    Args:
+      wpr_archive_path: The path of the WPR archive to read/modify.
+    """
+    self._wpr_archive_path = wpr_archive_path
+    self._http_archive = httparchive.HttpArchive.Load(wpr_archive_path)
+
+  def ListUrlEntries(self):
+    """Iterates over all url entries
+
+    Returns:
+      A list of WprUrlEntry.
+    """
+    return [WprUrlEntry(request, self._http_archive[request])
+            for request in self._http_archive.get_requests()]
+
+  def Persist(self):
+    """Persists the archive to disk. """
+    self._http_archive.Persist(self._wpr_archive_path)
+
+
+if __name__ == '__main__':
+  import argparse
+  parser = argparse.ArgumentParser(description='Tests cache back-end.')
+  parser.add_argument('wpr_archive', type=str)
+  command_line_args = parser.parse_args()
+
+  wpr_backend = WprArchiveBackend(command_line_args.wpr_archive)
+  url_entries = wpr_backend.ListUrlEntries()
+  print url_entries[0].url
+  wpr_backend.Persist()
diff --git a/tools/android/loading/wpr_backend_unittest.py b/tools/android/loading/wpr_backend_unittest.py
new file mode 100644
index 0000000..e38070ca
--- /dev/null
+++ b/tools/android/loading/wpr_backend_unittest.py
@@ -0,0 +1,92 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from wpr_backend import WprUrlEntry
+
+
+class MockWprResponse(object):
+  def __init__(self, headers):
+    self.headers = headers
+
+class WprUrlEntryTest(unittest.TestCase):
+
+  @classmethod
+  def _CreateWprUrlEntry(cls, headers):
+    wpr_response = MockWprResponse(headers)
+    return WprUrlEntry('GET http://a.com/', wpr_response)
+
+  def test_ExtractUrl(self):
+    self.assertEquals('http://aa.bb/c',
+                      WprUrlEntry._ExtractUrl('GET http://aa.bb/c'))
+    self.assertEquals('http://aa.b/c',
+                      WprUrlEntry._ExtractUrl('POST http://aa.b/c'))
+    self.assertEquals('http://a.bb/c',
+                      WprUrlEntry._ExtractUrl('WHATEVER http://a.bb/c'))
+    self.assertEquals('https://aa.bb/c',
+                      WprUrlEntry._ExtractUrl('GET https://aa.bb/c'))
+    self.assertEquals('http://aa.bb',
+                      WprUrlEntry._ExtractUrl('GET http://aa.bb'))
+    self.assertEquals('http://aa.bb',
+                      WprUrlEntry._ExtractUrl('GET http://aa.bb FOO BAR'))
+
+  def test_GetResponseHeadersDict(self):
+    entry = self._CreateWprUrlEntry([('header0', 'value0'),
+                                     ('header1', 'value1'),
+                                     ('header0', 'value2'),
+                                     ('header2', 'value3'),
+                                     ('header0', 'value4')])
+    headers = entry.GetResponseHeadersDict()
+    self.assertEquals(3, len(headers))
+    self.assertEquals('value0,value2,value4', headers['header0'])
+    self.assertEquals('value1', headers['header1'])
+    self.assertEquals('value3', headers['header2'])
+
+  def test_SetResponseHeader(self):
+    entry = self._CreateWprUrlEntry([('header0', 'value0'),
+                                     ('header1', 'value1')])
+    entry.SetResponseHeader('new_header0', 'new_value0')
+    headers = entry.GetResponseHeadersDict()
+    self.assertEquals(3, len(headers))
+    self.assertEquals('new_value0', headers['new_header0'])
+    self.assertEquals('new_header0', entry._wpr_response.headers[2][0])
+
+    entry = self._CreateWprUrlEntry([('header0', 'value0'),
+                                     ('header1', 'value1'),
+                                     ('header2', 'value1'),])
+    entry.SetResponseHeader('header1', 'new_value1')
+    headers = entry.GetResponseHeadersDict()
+    self.assertEquals(3, len(headers))
+    self.assertEquals('new_value1', headers['header1'])
+    self.assertEquals('header1', entry._wpr_response.headers[1][0])
+
+    entry = self._CreateWprUrlEntry([('header0', 'value0'),
+                                     ('header1', 'value1'),
+                                     ('header2', 'value2'),
+                                     ('header1', 'value3'),
+                                     ('header3', 'value4')])
+    entry.SetResponseHeader('header1', 'new_value2')
+    headers = entry.GetResponseHeadersDict()
+    self.assertEquals(4, len(headers))
+    self.assertEquals('new_value2', headers['header1'])
+    self.assertEquals('header1', entry._wpr_response.headers[1][0])
+    self.assertEquals('header3', entry._wpr_response.headers[3][0])
+    self.assertEquals('value4', entry._wpr_response.headers[3][1])
+
+  def test_DeleteResponseHeader(self):
+    entry = self._CreateWprUrlEntry([('header0', 'value0'),
+                                     ('header1', 'value1'),
+                                     ('header0', 'value2'),
+                                     ('header2', 'value3')])
+    entry.DeleteResponseHeader('header1')
+    self.assertNotIn('header1', entry.GetResponseHeadersDict())
+    self.assertEquals(2, len(entry.GetResponseHeadersDict()))
+    entry.DeleteResponseHeader('header0')
+    self.assertNotIn('header0', entry.GetResponseHeadersDict())
+    self.assertEquals(1, len(entry.GetResponseHeadersDict()))
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index a404461c..2c454d2 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -178,18 +178,15 @@
 VisualStudioWriter::SolutionProject::~SolutionProject() = default;
 
 VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings,
+                                       bool is_debug_config,
+                                       const char* config_platform,
                                        Version version)
     : build_settings_(build_settings),
+      is_debug_config_(is_debug_config),
+      config_platform_(config_platform),
       ninja_path_output_(build_settings->build_dir(),
                          build_settings->root_path_utf8(),
                          EscapingMode::ESCAPE_NINJA_COMMAND) {
-  const Value* value = build_settings->build_args().GetArgOverride("is_debug");
-  is_debug_config_ = value == nullptr || value->boolean_value();
-  config_platform_ = "Win32";
-  value = build_settings->build_args().GetArgOverride(variables::kTargetCpu);
-  if (value != nullptr && value->string_value() == "x64")
-    config_platform_ = "x64";
-
   switch (version) {
     case Version::Vs2013:
       project_version_ = kProjectVersionVs2013;
@@ -220,7 +217,24 @@
                                           Err* err) {
   std::vector<const Target*> targets = builder->GetAllResolvedTargets();
 
-  VisualStudioWriter writer(build_settings, version);
+  bool is_debug_config = true;
+  const char* config_platform = "Win32";
+
+  // Assume the "is_debug" and "target_cpu" variables do not change
+  // between different toolchains.
+  if (!targets.empty()) {
+    const Scope* scope = targets.front()->settings()->base_config();
+    const Value* is_debug_value = scope->GetValue("is_debug");
+    is_debug_config =
+        is_debug_value == nullptr || is_debug_value->boolean_value();
+    const Value* target_cpu_value = scope->GetValue(variables::kTargetCpu);
+    if (target_cpu_value != nullptr &&
+        target_cpu_value->string_value() == "x64")
+      config_platform = "x64";
+  }
+
+  VisualStudioWriter writer(build_settings, is_debug_config, config_platform,
+                            version);
   writer.projects_.reserve(targets.size());
   writer.folders_.reserve(targets.size());
 
@@ -255,16 +269,14 @@
 
 bool VisualStudioWriter::WriteProjectFiles(const Target* target, Err* err) {
   std::string project_name = target->label().name();
-  std::string project_config_platform = config_platform_;
+  const char* project_config_platform = config_platform_;
   if (!target->settings()->is_default()) {
     project_name += "_" + target->toolchain()->label().name();
-    project_config_platform = target->toolchain()
-                                  ->settings()
-                                  ->build_settings()
-                                  ->build_args()
-                                  .GetArgOverride(variables::kCurrentCpu)
-                                  ->string_value();
-    if (project_config_platform == "x86")
+    const Value* value =
+        target->settings()->base_config()->GetValue(variables::kCurrentCpu);
+    if (value != nullptr && value->string_value() == "x64")
+      project_config_platform = "x64";
+    else
       project_config_platform = "Win32";
   }
 
diff --git a/tools/gn/visual_studio_writer.h b/tools/gn/visual_studio_writer.h
index 8ca92fb..e9f2658 100644
--- a/tools/gn/visual_studio_writer.h
+++ b/tools/gn/visual_studio_writer.h
@@ -75,6 +75,8 @@
   using SolutionFolders = std::vector<SolutionEntry*>;
 
   explicit VisualStudioWriter(const BuildSettings* build_settings,
+                              bool is_debug_config,
+                              const char* config_platform,
                               Version version);
   ~VisualStudioWriter();
 
@@ -110,7 +112,7 @@
 
   // Platform for solution configuration (Win32, x64). Some projects may be
   // configured for different platform.
-  std::string config_platform_;
+  const char* config_platform_;
 
   // All projects contained by solution.
   SolutionProjects projects_;
diff --git a/tools/gn/visual_studio_writer_unittest.cc b/tools/gn/visual_studio_writer_unittest.cc
index 1675e4f..e8ad75a 100644
--- a/tools/gn/visual_studio_writer_unittest.cc
+++ b/tools/gn/visual_studio_writer_unittest.cc
@@ -26,7 +26,7 @@
 }  // namespace
 
 TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) {
-  VisualStudioWriter writer(setup_.build_settings(),
+  VisualStudioWriter writer(setup_.build_settings(), true, "Win32",
                             VisualStudioWriter::Version::Vs2015);
 
   std::string path =
@@ -80,7 +80,7 @@
 }
 
 TEST_F(VisualStudioWriterTest, ResolveSolutionFolders_AbsPath) {
-  VisualStudioWriter writer(setup_.build_settings(),
+  VisualStudioWriter writer(setup_.build_settings(), true, "Win32",
                             VisualStudioWriter::Version::Vs2015);
 
   std::string path =
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 03d73bd4..bb6c3e9 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -7870,6 +7870,60 @@
   </description>
 </action>
 
+<action name="Media_Paused">
+  <owner>liberato@chromium.org</owner>
+  <description>Media playback was paused.</description>
+</action>
+
+<action name="Media_Play_WithGesture">
+  <owner>liberato@chromium.org</owner>
+  <description>A call to play() with a user gesture succeeded.</description>
+</action>
+
+<action name="Media_Playback_Ended">
+  <owner>liberato@chromium.org</owner>
+  <description>Media playback reached the end.</description>
+</action>
+
+<action name="Media_Playback_Mute_Off">
+  <owner>liberato@chromium.org</owner>
+  <description>Mute was turned off.</description>
+</action>
+
+<action name="Media_Playback_Mute_On">
+  <owner>liberato@chromium.org</owner>
+  <description>Mute was turned on.</description>
+</action>
+
+<action name="Media_Playback_Started">
+  <owner>liberato@chromium.org</owner>
+  <description>Media playback started due to any cause.</description>
+</action>
+
+<action name="Media_RequestRemotePlayback">
+  <owner>liberato@chromium.org</owner>
+  <description>
+    User requested to transfer playback to a remote player, via 'cast' button.
+  </description>
+</action>
+
+<action name="Media_RequestRemotePlayback_Control">
+  <owner>liberato@chromium.org</owner>
+  <description>
+    User requested to control playback of a remote player, such as Chromecast.
+  </description>
+</action>
+
+<action name="Media_Seeked">
+  <owner>liberato@chromium.org</owner>
+  <description>Seek to different time completed.</description>
+</action>
+
+<action name="Media_SetVolume">
+  <owner>liberato@chromium.org</owner>
+  <description>Playback volume was changed.</description>
+</action>
+
 <action name="Menu_Take_Screenshot">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/actions/extract_actions.py b/tools/metrics/actions/extract_actions.py
index 8009e52..9acaf129 100755
--- a/tools/metrics/actions/extract_actions.py
+++ b/tools/metrics/actions/extract_actions.py
@@ -102,6 +102,7 @@
   'ppb_pdf_impl.cc',  # see AddClosedSourceActions()
   'pepper_pdf_host.cc',  # see AddClosedSourceActions()
   'record_user_action.cc', # see RecordUserAction.java
+  'blink_platform_impl.cc', # see WebKit/public/platform/Platform.h
 )
 
 # Language codes used in Chrome. The list should be updated when a new
@@ -489,7 +490,7 @@
   Arguments:
     actions: set of actions to add to.
   """
-  EXTENSIONS = ('.cc', '.mm', '.c', '.m', '.java')
+  EXTENSIONS = ('.cc', '.cpp', '.mm', '.c', '.m', '.java')
 
   # Walk the source tree to process all files.
   ash_root = os.path.normpath(os.path.join(REPOSITORY_ROOT, 'ash'))
@@ -508,6 +509,10 @@
                 GrepForActions)
   WalkDirectory(os.path.join(webkit_root, 'port'), actions, EXTENSIONS,
                 GrepForActions)
+  webkit_core_root = os.path.normpath(
+                     os.path.join(REPOSITORY_ROOT,
+                                  'third_party/WebKit/Source/core'))
+  WalkDirectory(webkit_core_root, actions, EXTENSIONS, GrepForActions)
 
 def AddWebUIActions(actions):
   """Add user actions defined in WebUI files.
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index ca6b8c6..66e63ae9 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -43512,6 +43512,25 @@
   </summary>
 </histogram>
 
+<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms">
+  <owner>proberge@google.com</owner>
+  <summary>
+    The elapsed time to check loaded modules against the module whitelist.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules">
+  <owner>proberge@google.com</owner>
+  <summary>The number of suspicious modules found.</summary>
+</histogram>
+
+<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms">
+  <owner>proberge@google.com</owner>
+  <summary>
+    The elapsed time to create incidents for suspicious modules.
+  </summary>
+</histogram>
+
 <histogram name="SBIRS.UploadResult" enum="ReportProcessingResult">
   <owner>caitkp@google.com</owner>
   <summary>
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py
index fa14dc9..2ea21d2c 100644
--- a/tools/perf/benchmarks/smoothness.py
+++ b/tools/perf/benchmarks/smoothness.py
@@ -128,6 +128,7 @@
     return 'smoothness.key_mobile_sites_smooth'
 
 
+@benchmark.Disabled('android-reference')  # crbug.com/588786
 @benchmark.Disabled('mac')  # crbug.com/563615
 class SmoothnessToughAnimationCases(_Smoothness):
   test = smoothness.SmoothnessWithRestart
@@ -492,8 +493,8 @@
     return 'smoothness.scrolling_tough_ad_cases'
 
 
-# http://crbug.com/522619 (mac/win)
-@benchmark.Disabled('win', 'mac')
+@benchmark.Disabled('android-reference')  # crbug.com/588786
+@benchmark.Disabled('mac', 'win')  # crbug.com/522619 (mac/win)
 class SmoothnessBidirectionallyScrollingToughAdCases(_Smoothness):
   """Measures rendering statistics while scrolling advertisements."""
   page_set = page_sets.BidirectionallyScrollingToughAdCasesPageSet
diff --git a/tools/perf/benchmarks/start_with_url.py b/tools/perf/benchmarks/start_with_url.py
index 87747ee..d1c5efb 100644
--- a/tools/perf/benchmarks/start_with_url.py
+++ b/tools/perf/benchmarks/start_with_url.py
@@ -34,6 +34,7 @@
 
 @benchmark.Enabled('has tabs')
 @benchmark.Enabled('android')
+@benchmark.Disabled('android-reference')  # crbug.com/588786
 @benchmark.Disabled('chromeos', 'linux', 'mac', 'win')
 class StartWithUrlWarmTBM(startup2._StartupPerfBenchmark):
   """Measures stimetime to start Chrome warm with startup URLs."""
diff --git a/tools/perf/page_sets/data/top_25_005.wpr.sha1 b/tools/perf/page_sets/data/top_25_005.wpr.sha1
new file mode 100644
index 0000000..da4dc085
--- /dev/null
+++ b/tools/perf/page_sets/data/top_25_005.wpr.sha1
@@ -0,0 +1 @@
+c6ec280a42f09e43c4f7ee2d2ca39cd8c9de9435
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/top_25_smooth.json b/tools/perf/page_sets/data/top_25_smooth.json
index faf94ca..251bcf3 100644
--- a/tools/perf/page_sets/data/top_25_smooth.json
+++ b/tools/perf/page_sets/data/top_25_smooth.json
@@ -1,43 +1,45 @@
 {
-    "description": "Describes the Web Page Replay archives for a page set. Don't edit by hand! Use record_wpr for updating.",
+    "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", 
     "archives": {
-        "top_25_003.wpr": [
-            "Facebook"
-        ],
-        "top_25_001.wpr": [
-            "https://plus.google.com/110031535020051778989/posts"
-        ],
         "top_25_002.wpr": [
             "https://www.google.com/search?q=cats&tbm=isch"
-        ],
+        ], 
+        "top_25_000.wpr": [
+            "https://www.google.com/#hl=en&q=barack+obama", 
+            "https://www.google.com/calendar/", 
+            "https://drive.google.com", 
+            "https://docs.google.com/document/d/1X-IKNjtEnx-WW5JIKRLsyhz5sbsat3mfTpAPUSX3_s4/view", 
+            "http://www.youtube.com", 
+            "http://googlewebmastercentral.blogspot.com/", 
+            "http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/", 
+            "http://www.facebook.com/barackobama", 
+            "http://www.linkedin.com/in/linustorvalds", 
+            "http://en.wikipedia.org/wiki/Wikipedia", 
+            "https://twitter.com/katyperry", 
+            "http://pinterest.com", 
+            "http://espn.go.com", 
+            "http://news.yahoo.com", 
+            "http://www.cnn.com", 
+            "http://www.weather.com/weather/right-now/Mountain+View+CA+94043", 
+            "http://www.amazon.com", 
+            "http://www.ebay.com", 
+            "http://games.yahoo.com", 
+            "http://booking.com", 
+            "http://answers.yahoo.com", 
+            "http://sports.yahoo.com/", 
+            "http://techcrunch.com"
+        ], 
+        "top_25_003.wpr": [
+            "Facebook"
+        ], 
+        "top_25_001.wpr": [
+            "https://plus.google.com/110031535020051778989/posts"
+        ], 
         "top_25_004.wpr": [
             "Wikipedia (1 tab)"
-        ],
-        "top_25_000.wpr": [
-            "https://www.google.com/#hl=en&q=barack+obama",
-            "https://mail.google.com/mail/",
-            "https://www.google.com/calendar/",
-            "https://drive.google.com",
-            "https://docs.google.com/document/d/1X-IKNjtEnx-WW5JIKRLsyhz5sbsat3mfTpAPUSX3_s4/view",
-            "http://www.youtube.com",
-            "http://googlewebmastercentral.blogspot.com/",
-            "http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/",
-            "http://www.facebook.com/barackobama",
-            "http://www.linkedin.com/in/linustorvalds",
-            "http://en.wikipedia.org/wiki/Wikipedia",
-            "https://twitter.com/katyperry",
-            "http://pinterest.com",
-            "http://espn.go.com",
-            "http://news.yahoo.com",
-            "http://www.cnn.com",
-            "http://www.weather.com/weather/right-now/Mountain+View+CA+94043",
-            "http://www.amazon.com",
-            "http://www.ebay.com",
-            "http://games.yahoo.com",
-            "http://booking.com",
-            "http://answers.yahoo.com",
-            "http://sports.yahoo.com/",
-            "http://techcrunch.com"
+        ], 
+        "top_25_005.wpr": [
+            "https://mail.google.com/mail/"
         ]
     }
-}
+}
\ No newline at end of file
diff --git a/tools/perf/page_sets/top_pages.py b/tools/perf/page_sets/top_pages.py
index 7f0d187..2bee269 100644
--- a/tools/perf/page_sets/top_pages.py
+++ b/tools/perf/page_sets/top_pages.py
@@ -4,6 +4,8 @@
 from telemetry.page import page as page_module
 from telemetry.page import shared_page_state
 
+from page_sets.login_helpers import google_login
+
 
 class TopPages(page_module.Page):
 
@@ -54,14 +56,16 @@
     super(GmailPage, self).__init__(
         url='https://mail.google.com/mail/',
         page_set=page_set,
-        credentials='google',
         shared_page_state_class=shared_page_state_class)
 
   def RunNavigateSteps(self, action_runner):
+    google_login.LoginGoogleAccount(action_runner, 'google3',
+                                    self.credentials_path)
     super(GmailPage, self).RunNavigateSteps(action_runner)
     action_runner.WaitForJavaScriptCondition(
         'window.gmonkey !== undefined &&'
-        'document.getElementById("gb") !== null')
+        'document.getElementById("gb") !== null',
+        timeout_in_seconds=120)
 
 
 class GoogleCalendarPage(TopPages):
diff --git a/ui/message_center/cocoa/notification_controller.h b/ui/message_center/cocoa/notification_controller.h
index a76c445..ef214f1 100644
--- a/ui/message_center/cocoa/notification_controller.h
+++ b/ui/message_center/cocoa/notification_controller.h
@@ -19,6 +19,20 @@
 
 @class HoverImageButton;
 
+namespace message_center {
+// A struct that can hold all the temporary frames
+// created when adjusting a view
+struct NotificationLayoutParams {
+  NSRect rootFrame;
+  NSRect titleFrame;
+  NSRect messageFrame;
+  NSRect contextMessageFrame;
+  NSRect settingsButtonFrame;
+  NSRect listFrame;
+  NSRect progressBarFrame;
+};
+}
+
 // The base view controller class for notifications. A notification at minimum
 // has an image, title, body, and close button. This controller can be used as
 // the content for both a popup bubble and a view in the notification tray.
@@ -91,6 +105,10 @@
 // Called when the user clicks within the notification view.
 - (void)notificationClicked;
 
+// Adjust the position and height of all the internal frames by |delta|.
+- (void)adjustFrameHeight:(message_center::NotificationLayoutParams*)frames
+                    delta:(CGFloat)delta;
+
 @end
 
 @interface MCNotificationController (TestingInterface)
diff --git a/ui/message_center/cocoa/notification_controller.mm b/ui/message_center/cocoa/notification_controller.mm
index 228305f6..ae4b8fc 100644
--- a/ui/message_center/cocoa/notification_controller.mm
+++ b/ui/message_center/cocoa/notification_controller.mm
@@ -364,9 +364,10 @@
   DCHECK_EQ(notification->id(), notificationID_);
   notification_ = notification;
 
-  NSRect rootFrame = NSMakeRect(0, 0,
-      message_center::kNotificationPreferredImageWidth,
-      message_center::kNotificationIconSize);
+  message_center::NotificationLayoutParams layoutParams;
+  layoutParams.rootFrame =
+      NSMakeRect(0, 0, message_center::kNotificationPreferredImageWidth,
+                 message_center::kNotificationIconSize);
 
   [smallImage_ setImage:notification_->small_image().AsNSImage()];
 
@@ -400,8 +401,10 @@
                         maxNumberOfLines:message_center::kMaxTitleLines
                              actualLines:&actualTitleLines])];
   [title_ sizeToFit];
-  NSRect titleFrame = [title_ frame];
-  titleFrame.origin.y = NSMaxY(rootFrame) - titlePadding - NSHeight(titleFrame);
+  layoutParams.titleFrame = [title_ frame];
+  layoutParams.titleFrame.origin.y = NSMaxY(layoutParams.rootFrame) -
+                                     titlePadding -
+                                     NSHeight(layoutParams.titleFrame);
 
   // The number of message lines depends on the number of context message lines
   // and the lines within the title, and whether an image exists.
@@ -424,7 +427,7 @@
              forFont:[message_ font]
       maxNumberOfLines:messageLineLimit])];
   [message_ sizeToFit];
-  NSRect messageFrame = [message_ frame];
+  layoutParams.messageFrame = [message_ frame];
 
   // If there are list items, then the message_ view should not be displayed.
   const std::vector<message_center::NotificationItem>& items =
@@ -434,13 +437,14 @@
   // space (size to fit leaves it 15 px tall.
   if (items.size() > 0 || notification_->message().empty()) {
     [message_ setHidden:YES];
-    messageFrame.origin.y = titleFrame.origin.y;
-    messageFrame.size.height = 0;
+    layoutParams.messageFrame.origin.y = layoutParams.titleFrame.origin.y;
+    layoutParams.messageFrame.size.height = 0;
   } else {
     [message_ setHidden:NO];
-    messageFrame.origin.y =
-        NSMinY(titleFrame) - messagePadding - NSHeight(messageFrame);
-    messageFrame.size.height = NSHeight([message_ frame]);
+    layoutParams.messageFrame.origin.y = NSMinY(layoutParams.titleFrame) -
+                                         messagePadding -
+                                         NSHeight(layoutParams.messageFrame);
+    layoutParams.messageFrame.size.height = NSHeight([message_ frame]);
   }
 
   // Set the context message and recalculate the frame.
@@ -461,31 +465,46 @@
   [contextMessage_ setString:base::SysUTF16ToNSString(elided)];
   [contextMessage_ sizeToFit];
 
-  NSRect contextMessageFrame = [contextMessage_ frame];
+  layoutParams.contextMessageFrame = [contextMessage_ frame];
 
   if (notification->context_message().empty() &&
       !notification->UseOriginAsContextMessage()) {
     [contextMessage_ setHidden:YES];
-    contextMessageFrame.origin.y = messageFrame.origin.y;
-    contextMessageFrame.size.height = 0;
+    layoutParams.contextMessageFrame.origin.y =
+        layoutParams.messageFrame.origin.y;
+    layoutParams.contextMessageFrame.size.height = 0;
   } else {
     [contextMessage_ setHidden:NO];
-    contextMessageFrame.origin.y =
-        NSMinY(messageFrame) -
-        contextMessagePadding -
-        NSHeight(contextMessageFrame);
-    contextMessageFrame.size.height = NSHeight([contextMessage_ frame]);
+
+    // If the context message is used as a domain make sure it's placed at the
+    // bottom of the top section.
+    CGFloat contextMessageY = NSMinY(layoutParams.messageFrame) -
+                              contextMessagePadding -
+                              NSHeight(layoutParams.contextMessageFrame);
+    layoutParams.contextMessageFrame.origin.y =
+        notification->UseOriginAsContextMessage()
+            ? std::min(NSMinY([icon_ frame]) + contextMessagePadding,
+                       contextMessageY)
+            : contextMessageY;
+    layoutParams.contextMessageFrame.size.height =
+        NSHeight([contextMessage_ frame]);
   }
-  NSRect settingsButtonFrame = [settingsButton_ frame];
+
+  // Calculate the settings button position. It is dependent on whether the
+  // context message aligns or not with the icon.
+  layoutParams.settingsButtonFrame = [settingsButton_ frame];
+  layoutParams.settingsButtonFrame.origin.y =
+      MIN(NSMinY([icon_ frame]) + message_center::kSmallImagePadding,
+          NSMinY(layoutParams.contextMessageFrame));
 
   // Create the list item views (up to a maximum).
   [listView_ removeFromSuperview];
-  NSRect listFrame = NSZeroRect;
+  layoutParams.listFrame = NSZeroRect;
   if (items.size() > 0) {
-    listFrame = [self currentContentRect];
-    listFrame.origin.y = 0;
-    listFrame.size.height = 0;
-    listView_.reset([[NSView alloc] initWithFrame:listFrame]);
+    layoutParams.listFrame = [self currentContentRect];
+    layoutParams.listFrame.origin.y = 0;
+    layoutParams.listFrame.size.height = 0;
+    listView_.reset([[NSView alloc] initWithFrame:layoutParams.listFrame]);
     [listView_ accessibilitySetOverrideValue:NSAccessibilityListRole
                                     forAttribute:NSAccessibilityRoleAttribute];
     [listView_
@@ -499,8 +518,9 @@
     const int kNumNotifications =
         std::min(items.size(), message_center::kNotificationMaximumItems);
     for (int i = kNumNotifications - 1; i >= 0; --i) {
-      NSTextView* itemView = [self newLabelWithFrame:
-          NSMakeRect(0, y, NSWidth(listFrame), lineHeight)];
+      NSTextView* itemView = [self
+          newLabelWithFrame:NSMakeRect(0, y, NSWidth(layoutParams.listFrame),
+                                       lineHeight)];
       [itemView setFont:font];
 
       // Disable the word-wrap in order to show the text in single line.
@@ -538,24 +558,27 @@
     // TODO(thakis): The spacing is not completely right.
     CGFloat listTopPadding =
         message_center::kTextTopPadding - contextMessageTopGap;
-    listFrame.size.height = y;
-    listFrame.origin.y =
-        NSMinY(contextMessageFrame) - listTopPadding - NSHeight(listFrame);
-    [listView_ setFrame:listFrame];
+    layoutParams.listFrame.size.height = y;
+    layoutParams.listFrame.origin.y = NSMinY(layoutParams.contextMessageFrame) -
+                                      listTopPadding -
+                                      NSHeight(layoutParams.listFrame);
+    [listView_ setFrame:layoutParams.listFrame];
     [[self view] addSubview:listView_];
   }
 
   // Create the progress bar view if needed.
   [progressBarView_ removeFromSuperview];
-  NSRect progressBarFrame = NSZeroRect;
+  layoutParams.progressBarFrame = NSZeroRect;
   if (notification->type() == message_center::NOTIFICATION_TYPE_PROGRESS) {
-    progressBarFrame = [self currentContentRect];
-    progressBarFrame.origin.y = NSMinY(contextMessageFrame) -
+    layoutParams.progressBarFrame = [self currentContentRect];
+    layoutParams.progressBarFrame.origin.y =
+        NSMinY(layoutParams.contextMessageFrame) -
         message_center::kProgressBarTopPadding -
         message_center::kProgressBarThickness;
-    progressBarFrame.size.height = message_center::kProgressBarThickness;
-    progressBarView_.reset(
-        [[MCNotificationProgressBar alloc] initWithFrame:progressBarFrame]);
+    layoutParams.progressBarFrame.size.height =
+        message_center::kProgressBarThickness;
+    progressBarView_.reset([[MCNotificationProgressBar alloc]
+        initWithFrame:layoutParams.progressBarFrame]);
     // Setting indeterminate to NO does not work with custom drawRect.
     [progressBarView_ setIndeterminate:YES];
     [progressBarView_ setStyle:NSProgressIndicatorBarStyle];
@@ -565,24 +588,18 @@
 
   // If the bottom-most element so far is out of the rootView's bounds, resize
   // the view.
-  CGFloat minY = NSMinY(contextMessageFrame);
-  if (listView_ && NSMinY(listFrame) < minY)
-    minY = NSMinY(listFrame);
-  if (progressBarView_ && NSMinY(progressBarFrame) < minY)
-    minY = NSMinY(progressBarFrame);
+  CGFloat minY = NSMinY(layoutParams.contextMessageFrame);
+  if (listView_ && NSMinY(layoutParams.listFrame) < minY)
+    minY = NSMinY(layoutParams.listFrame);
+  if (progressBarView_ && NSMinY(layoutParams.progressBarFrame) < minY)
+    minY = NSMinY(layoutParams.progressBarFrame);
   if (minY < messagePadding) {
     CGFloat delta = messagePadding - minY;
-    rootFrame.size.height += delta;
-    titleFrame.origin.y += delta;
-    messageFrame.origin.y += delta;
-    contextMessageFrame.origin.y += delta;
-    settingsButtonFrame.origin.y += delta;
-    listFrame.origin.y += delta;
-    progressBarFrame.origin.y += delta;
+    [self adjustFrameHeight:&layoutParams delta:delta];
   }
 
   // Add the bottom container view.
-  NSRect frame = rootFrame;
+  NSRect frame = layoutParams.rootFrame;
   frame.size.height = 0;
   [bottomView_ removeFromSuperview];
   bottomView_.reset([[NSView alloc] initWithFrame:frame]);
@@ -642,38 +659,26 @@
 
   [bottomView_ setFrame:frame];
   [[self view] addSubview:bottomView_];
-
-  rootFrame.size.height += NSHeight(frame);
-  titleFrame.origin.y += NSHeight(frame);
-  messageFrame.origin.y += NSHeight(frame);
-  contextMessageFrame.origin.y += NSHeight(frame);
-  settingsButtonFrame.origin.y += NSHeight(frame);
-  listFrame.origin.y += NSHeight(frame);
-  progressBarFrame.origin.y += NSHeight(frame);
+  [self adjustFrameHeight:&layoutParams delta:NSHeight(frame)];
 
   // Make sure that there is a minimum amount of spacing below the icon and
   // the edge of the frame.
-  CGFloat bottomDelta = NSHeight(rootFrame) - NSHeight([icon_ frame]);
+  CGFloat bottomDelta =
+      NSHeight(layoutParams.rootFrame) - NSHeight([icon_ frame]);
   if (bottomDelta > 0 && bottomDelta < message_center::kIconBottomPadding) {
     CGFloat bottomAdjust = message_center::kIconBottomPadding - bottomDelta;
-    rootFrame.size.height += bottomAdjust;
-    titleFrame.origin.y += bottomAdjust;
-    messageFrame.origin.y += bottomAdjust;
-    contextMessageFrame.origin.y += bottomAdjust;
-    settingsButtonFrame.origin.y += bottomAdjust;
-    listFrame.origin.y += bottomAdjust;
-    progressBarFrame.origin.y += bottomAdjust;
+    [self adjustFrameHeight:&layoutParams delta:bottomAdjust];
   }
 
-  [[self view] setFrame:rootFrame];
-  [title_ setFrame:titleFrame];
-  [message_ setFrame:messageFrame];
-  [contextMessage_ setFrame:contextMessageFrame];
-  [settingsButton_ setFrame:settingsButtonFrame];
-  [listView_ setFrame:listFrame];
-  [progressBarView_ setFrame:progressBarFrame];
+  [[self view] setFrame:layoutParams.rootFrame];
+  [title_ setFrame:layoutParams.titleFrame];
+  [message_ setFrame:layoutParams.messageFrame];
+  [contextMessage_ setFrame:layoutParams.contextMessageFrame];
+  [settingsButton_ setFrame:layoutParams.settingsButtonFrame];
+  [listView_ setFrame:layoutParams.listFrame];
+  [progressBarView_ setFrame:layoutParams.progressBarFrame];
 
-  return rootFrame;
+  return layoutParams.rootFrame;
 }
 
 - (void)close:(id)sender {
@@ -702,6 +707,17 @@
   messageCenter_->ClickOnNotification([self notificationID]);
 }
 
+- (void)adjustFrameHeight:(message_center::NotificationLayoutParams*)frames
+                    delta:(CGFloat)delta {
+  frames->rootFrame.size.height += delta;
+  frames->titleFrame.origin.y += delta;
+  frames->messageFrame.origin.y += delta;
+  frames->contextMessageFrame.origin.y += delta;
+  frames->settingsButtonFrame.origin.y += delta;
+  frames->listFrame.origin.y += delta;
+  frames->progressBarFrame.origin.y += delta;
+}
+
 // Private /////////////////////////////////////////////////////////////////////
 
 - (void)configureCustomBox:(NSBox*)box {
diff --git a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
index 4752372..8cc2c04 100644
--- a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
@@ -73,7 +73,7 @@
                              EGL_RENDERABLE_TYPE,
                              EGL_OPENGL_ES2_BIT,
                              EGL_SURFACE_TYPE,
-                             EGL_WINDOW_BIT,
+                             EGL_DONT_CARE,
                              EGL_NONE};
   return ChooseEGLConfig(egl, config_attribs);
 }
diff --git a/ui/views/mus/BUILD.gn b/ui/views/mus/BUILD.gn
index 71f251aa..c9b0ec3 100644
--- a/ui/views/mus/BUILD.gn
+++ b/ui/views/mus/BUILD.gn
@@ -145,9 +145,7 @@
   sources = [
     "../run_all_unittests.cc",
     "../run_all_unittests.h",
-    "../widget/native_widget_unittest.cc",
-    "../widget/root_view_unittest.cc",
-    "../widget/widget_unittest.cc",
+    "../view_targeter_unittest.cc",
     "platform_test_helper_mus.cc",
     "run_all_unittests_mus.cc",
   ]
@@ -160,6 +158,7 @@
     "//cc",
     "//mojo/shell/background:lib",
     "//mojo/shell/background:main",
+    "//mojo/shell/background/tests:test_support",
     "//mojo/shell/public/cpp:sources",
     "//mojo/shell/runner/host:lib",
     "//skia",
diff --git a/ui/views/mus/native_widget_mus.cc b/ui/views/mus/native_widget_mus.cc
index 3905e17d..d485155 100644
--- a/ui/views/mus/native_widget_mus.cc
+++ b/ui/views/mus/native_widget_mus.cc
@@ -348,6 +348,10 @@
       parent_mus->AddTransientWindow(window_);
   }
 
+  // TODO(sky): deal with show state.
+  if (!params.bounds.size().IsEmpty())
+    SetBounds(params.bounds);
+
   // TODO(beng): much else, see [Desktop]NativeWidgetAura.
 
   native_widget_delegate_->OnNativeWidgetCreated(false);
diff --git a/ui/views/mus/platform_test_helper_mus.cc b/ui/views/mus/platform_test_helper_mus.cc
index bc99b4b..918c550 100644
--- a/ui/views/mus/platform_test_helper_mus.cc
+++ b/ui/views/mus/platform_test_helper_mus.cc
@@ -6,14 +6,19 @@
 
 #include "base/command_line.h"
 #include "mojo/shell/background/background_shell.h"
+#include "mojo/shell/background/tests/test_application_catalog_store.h"
 #include "mojo/shell/public/cpp/shell_client.h"
 #include "mojo/shell/public/cpp/shell_connection.h"
 #include "ui/views/mus/window_manager_connection.h"
 #include "url/gurl.h"
 
+using mojo::shell::BackgroundShell;
+
 namespace views {
 namespace {
 
+const char kTestUrl[] = "mojo://test-app";
+
 class DefaultShellClient : public mojo::ShellClient {
  public:
   DefaultShellClient() {}
@@ -23,18 +28,27 @@
   DISALLOW_COPY_AND_ASSIGN(DefaultShellClient);
 };
 
+scoped_ptr<mojo::shell::TestApplicationCatalogStore>
+BuildTestApplicationCatalogStore() {
+  scoped_ptr<base::ListValue> apps(new base::ListValue);
+  apps->Append(
+      mojo::shell::BuildPermissiveSerializedAppInfo(GURL(kTestUrl), "test"));
+  return make_scoped_ptr(
+      new mojo::shell::TestApplicationCatalogStore(std::move(apps)));
+}
+
 class PlatformTestHelperMus : public PlatformTestHelper {
  public:
   PlatformTestHelperMus() {
-    // Force the new edk.
-    base::CommandLine::ForCurrentProcess()->AppendSwitch("use-new-edk");
-
-    background_shell_.reset(new mojo::shell::BackgroundShell);
-    background_shell_->Init(nullptr);
+    background_shell_.reset(new BackgroundShell);
+    scoped_ptr<BackgroundShell::InitParams> init_params(
+        new BackgroundShell::InitParams);
+    init_params->app_catalog = BuildTestApplicationCatalogStore();
+    background_shell_->Init(std::move(init_params));
     shell_client_.reset(new DefaultShellClient);
     shell_connection_.reset(new mojo::ShellConnection(
         shell_client_.get(),
-        background_shell_->CreateShellClientRequest(GURL("mojo://test-app"))));
+        background_shell_->CreateShellClientRequest(GURL(kTestUrl))));
     shell_connection_->WaitForInitialize();
     // ui/views/mus requires a WindowManager running, for now use the desktop
     // one.
@@ -50,7 +64,7 @@
   }
 
  private:
-  scoped_ptr<mojo::shell::BackgroundShell> background_shell_;
+  scoped_ptr<BackgroundShell> background_shell_;
   scoped_ptr<mojo::ShellConnection> shell_connection_;
   scoped_ptr<DefaultShellClient> shell_client_;