diff --git a/DEPS b/DEPS
index 36807e5..ddee0bc4 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # 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': '64735758443e0a81a2f8a67338a5203fd725c2f3',
+  'v8_revision': '71c20abb86b91696bf5d96eadc5290d4c0c566f0',
   # 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.
@@ -235,7 +235,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' + '@' + 'db65e09f7280a3cbe98bb11a394f1f4c2a952603', # commit position 18709
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'e69e1db6a0089106915f93d8c30e1840c16893f8', # commit position 18757
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/chrome/browser/chromeos/policy/policy_cert_service_factory.cc b/chrome/browser/chromeos/policy/policy_cert_service_factory.cc
index 246c8ea..8c86647f 100644
--- a/chrome/browser/chromeos/policy/policy_cert_service_factory.cc
+++ b/chrome/browser/chromeos/policy/policy_cert_service_factory.cc
@@ -10,14 +10,11 @@
 #include "chrome/browser/chromeos/policy/policy_cert_verifier.h"
 #include "chrome/browser/chromeos/policy/user_network_configuration_updater_factory.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
-#include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_registry_simple.h"
-#include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/user_manager/user_manager.h"
 
@@ -101,28 +98,6 @@
   if (!user)
     return NULL;
 
-  // Backwards compatibility: profiles that used policy-pushed certificates used
-  // to have this condition marked in their prefs. This signal has moved to
-  // local_state though, to support checking it before the profile is loaded.
-  // Check the profile here and update the local_state, if appropriate.
-  // TODO(joaodasilva): remove this, eventually.
-  PrefService* prefs = profile->GetOriginalProfile()->GetPrefs();
-  if (prefs->GetBoolean(prefs::kUsedPolicyCertificatesOnce)) {
-    SetUsedPolicyCertificates(user->GetAccountId().GetUserEmail());
-    prefs->ClearPref(prefs::kUsedPolicyCertificatesOnce);
-
-    if (user_manager->GetLoggedInUsers().size() > 1u) {
-      // This login should not have been allowed. After rebooting, local_state
-      // will contain the updated list of users that used policy-pushed
-      // certificates and this won't happen again.
-      // Note that a user becomes logged in before their profile is created.
-      LOG(ERROR) << "Shutdown session because a tainted profile was added.";
-      g_browser_process->local_state()->CommitPendingWrite();
-      prefs->CommitPendingWrite();
-      chrome::AttemptUserExit();
-    }
-  }
-
   UserNetworkConfigurationUpdater* net_conf_updater =
       UserNetworkConfigurationUpdaterFactory::GetForProfile(profile);
   if (!net_conf_updater)
@@ -137,13 +112,6 @@
   return chrome::GetBrowserContextOwnInstanceInIncognito(context);
 }
 
-void PolicyCertServiceFactory::RegisterProfilePrefs(
-    user_prefs::PrefRegistrySyncable* registry) {
-  // TODO(joaodasilva): this is used for backwards compatibility.
-  // Remove once it's not necessary anymore.
-  registry->RegisterBooleanPref(prefs::kUsedPolicyCertificatesOnce, false);
-}
-
 bool PolicyCertServiceFactory::ServiceIsNULLWhileTesting() const {
   return true;
 }
diff --git a/chrome/browser/chromeos/policy/policy_cert_service_factory.h b/chrome/browser/chromeos/policy/policy_cert_service_factory.h
index 1a135ef..8ee3aef 100644
--- a/chrome/browser/chromeos/policy/policy_cert_service_factory.h
+++ b/chrome/browser/chromeos/policy/policy_cert_service_factory.h
@@ -62,8 +62,6 @@
       content::BrowserContext* context) const override;
   content::BrowserContext* GetBrowserContextToUse(
       content::BrowserContext* context) const override;
-  void RegisterProfilePrefs(
-      user_prefs::PrefRegistrySyncable* registry) override;
   bool ServiceIsNULLWhileTesting() const override;
 
   DISALLOW_COPY_AND_ASSIGN(PolicyCertServiceFactory);
diff --git a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
index eaffd32..e12ba924 100644
--- a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
+++ b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
@@ -799,15 +799,18 @@
 // functionality.
 message DeviceSecondFactorAuthenticationProto {
   enum U2fMode {
+    // Default value, unspecified.
+    UNSET = 0;
     // Feature disabled.
-    DISABLED = 0;
-    // U2F as defined by the FIDO Alliance specification.
-    U2F = 1;
+    DISABLED = 1;
+    // U2F as defined by the FIDO Alliance specification:
+    // https://fidoalliance.org/specs/fido-u2f-v1.1-id-20160915.zip
+    U2F = 2;
     // U2F plus extensions for individual attestation certificate.
-    U2F_EXTENDED = 2;
+    U2F_EXTENDED = 3;
   };
 
-  optional U2fMode mode = 1 [default = DISABLED];
+  optional U2fMode mode = 1;
 }
 
 message ChromeDeviceSettingsProto {
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 dcf21cd..f974f24 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -99,8 +99,7 @@
       store_(std::move(store)),
       external_data_manager_(std::move(external_data_manager)),
       component_policy_cache_path_(component_policy_cache_path),
-      wait_for_policy_fetch_(wait_for_policy_fetch),
-      policy_fetch_timeout_(false, false) {
+      wait_for_policy_fetch_(wait_for_policy_fetch) {
   time_init_started_ = base::Time::Now();
 
   // Caller must pass a non-zero policy_fetch_timeout iff
@@ -111,8 +110,7 @@
           chromeos::switches::kAllowFailedPolicyFetchForTest) ||
       !initial_policy_fetch_timeout.is_max();
   // No need to set the timer when the timeout is infinite.
-  if (wait_for_policy_fetch_ && allow_failed_policy_fetches_ &&
-      !initial_policy_fetch_timeout.is_max()) {
+  if (wait_for_policy_fetch_ && !initial_policy_fetch_timeout.is_max()) {
     policy_fetch_timeout_.Start(
         FROM_HERE,
         initial_policy_fetch_timeout,
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 e3ef616..a7403924 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
@@ -44,8 +44,10 @@
                                        public CloudPolicyService::Observer,
                                        public KeyedService {
  public:
-  // If |wait_for_policy_fetch| is true, IsInitializationComplete() will return
-  // false as long as there hasn't been a successful policy fetch.
+  // If |wait_for_policy_fetch| is true, IsInitializationComplete() is forced to
+  // false until either there has been a successful policy fetch from the server
+  // or |initial_policy_fetch_timeout| has expired. (The timeout may be set to
+  // TimeDelta::Max() to block permanently.)
   // |task_runner| is the runner for policy refresh tasks.
   // |file_task_runner| is used for file operations. Currently this must be the
   // FILE BrowserThread.
@@ -164,7 +166,7 @@
 
   // A timer that puts a hard limit on the maximum time to wait for the initial
   // policy fetch.
-  base::Timer policy_fetch_timeout_;
+  base::Timer policy_fetch_timeout_{false, false};
 
   // The pref service to pass to the refresh scheduler on initialization.
   PrefService* local_state_;
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index d66b7d48..efd6292 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -820,13 +820,6 @@
 // honored for public accounts.
 const char kTermsOfServiceURL[] = "terms_of_service.url";
 
-// Indicates that the Profile has made navigations that used a certificate
-// installed by the system administrator. If that is true then the local cache
-// of remote data is tainted (e.g. shared scripts), and future navigations
-// show a warning indicating that the organization may track the browsing
-// session.
-const char kUsedPolicyCertificatesOnce[] = "used_policy_certificates_once";
-
 // Indicates whether the remote attestation is enabled for the user.
 const char kAttestationEnabled[] = "attestation.enabled";
 // The list of extensions allowed to use the platformKeysPrivate API for
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index a6e4507..184079a2 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -290,7 +290,6 @@
 extern const char kPowerWaitForInitialUserActivity[];
 extern const char kPowerForceNonzeroBrightnessForUserActivity[];
 extern const char kTermsOfServiceURL[];
-extern const char kUsedPolicyCertificatesOnce[];
 extern const char kAttestationEnabled[];
 extern const char kAttestationExtensionWhitelist[];
 extern const char kTouchHudProjectionEnabled[];
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 6ab8e159..552424f 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -9638,22 +9638,22 @@
       'type': 'int-enum',
       'schema': {
         'type': 'integer',
-        'enum': [ 0, 1, 2 ],
+        'enum': [ 0, 1, 2, 3 ],
       },
       'items': [
         {
           'name': 'Disabled',
-          'value': 0,
+          'value': 1,
           'caption': '''Second factor disabled''',
         },
         {
           'name': 'U2F',
-          'value': 1,
+          'value': 2,
           'caption': '''U2F (Universal Second Factor)''',
         },
         {
           'name': 'U2F_EXTENDED',
-          'value': 2,
+          'value': 3,
           'caption': '''U2F plus extensions for individual attestation''',
         },
       ],
@@ -9662,13 +9662,13 @@
       'features': {
         'dynamic_refresh': False,
       },
-      'example_value': 1,
+      'example_value': 2,
       'id': 372,
       'caption': '''Integrated second factor authentication mode''',
       'tags': ['system-security'],
       'desc': '''Specifies how the on-board secure element hardware can be used to provide a second-factor authentication if it is compatible with this feature. The machine power button is used to detect the user physical presence.
 
-      If 'Disabled' is selected or the policy is left unset, no second factor is provided.
+      If 'Disabled' is selected, no second factor is provided.
 
       If 'U2F' is selected, the integrated second factor will behave according the FIDO U2F specification.
 
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h
index 79cdf4f..528f094a 100644
--- a/content/browser/bad_message.h
+++ b/content/browser/bad_message.h
@@ -82,8 +82,8 @@
   SWDH_GET_REGISTRATION_FOR_READY_NO_HOST = 58,
   SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS = 59,
   SWDH_POST_MESSAGE = 60,
-  SWDH_PROVIDER_CREATED_NO_HOST = 61,
-  SWDH_PROVIDER_DESTROYED_NO_HOST = 62,
+  SWDH_PROVIDER_CREATED_NO_HOST = 61,    // obsolete; no longer used
+  SWDH_PROVIDER_DESTROYED_NO_HOST = 62,  // obsolete; no longer used
   SWDH_SET_HOSTED_VERSION_NO_HOST = 63,
   OBSOLETE_SWDH_SET_HOSTED_VERSION = 64,
   SWDH_WORKER_SCRIPT_LOAD_NO_HOST = 65,
@@ -194,7 +194,11 @@
   RFH_ILLEGAL_UPLOAD_PARAMS = 170,
   RFH_BASE_URL_FOR_DATA_URL_SPECIFIED = 171,
   RFPH_ILLEGAL_UPLOAD_PARAMS = 172,
-  SWDH_PROVIDER_CREATED_ILLEGAL_TYPE = 173,
+  SWDH_PROVIDER_CREATED_ILLEGAL_TYPE = 173,  // obsolete; no longer used
+  SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_NOT_WINDOW = 174,
+  SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_CONTROLLER = 175,
+  SWDH_PROVIDER_CREATED_DUPLICATE_ID = 176,
+  SWDH_PROVIDER_CREATED_BAD_ID = 177,
 
   // Please add new elements here. The naming convention is abbreviated class
   // name (e.g. RenderFrameHost becomes RFH) plus a unique description of the
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 729707f9..38d7534e 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -83,24 +83,22 @@
         void(std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy>,
              bool wait_for_debugger)>& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy> devtools_proxy;
-  int worker_devtools_agent_route_id = MSG_ROUTING_NONE;
-  bool wait_for_debugger = false;
-  if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) {
-    // |rph| may be NULL in unit tests.
-    worker_devtools_agent_route_id = rph->GetNextRoutingID();
-    wait_for_debugger =
-        ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated(
-            process_id, worker_devtools_agent_route_id,
-            ServiceWorkerDevToolsManager::ServiceWorkerIdentifier(
-                service_worker_context, service_worker_context_weak,
-                service_worker_version_id, url, scope),
-            is_installed);
-    if (request.is_pending())
-      BindInterface(rph, std::move(request));
-    devtools_proxy = base::MakeUnique<EmbeddedWorkerInstance::DevToolsProxy>(
-        process_id, worker_devtools_agent_route_id);
-  }
+  RenderProcessHost* rph = RenderProcessHost::FromID(process_id);
+  // TODO(shimazu): Temporary CHECK to debug https://crbug.com/736649.
+  CHECK(rph);
+  int worker_devtools_agent_route_id = rph->GetNextRoutingID();
+  bool wait_for_debugger =
+      ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated(
+          process_id, worker_devtools_agent_route_id,
+          ServiceWorkerDevToolsManager::ServiceWorkerIdentifier(
+              service_worker_context, service_worker_context_weak,
+              service_worker_version_id, url, scope),
+          is_installed);
+  if (request.is_pending())
+    BindInterface(rph, std::move(request));
+  std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy> devtools_proxy =
+      base::MakeUnique<EmbeddedWorkerInstance::DevToolsProxy>(
+          process_id, worker_devtools_agent_route_id);
   BrowserThread::PostTask(
       BrowserThread::IO, FROM_HERE,
       base::Bind(callback, base::Passed(&devtools_proxy), wait_for_debugger));
@@ -591,7 +589,8 @@
     std::unique_ptr<EmbeddedWorkerStartParams> params) {
   if (!context_)
     return SERVICE_WORKER_ERROR_ABORT;
-  DCHECK(pending_dispatcher_request_.is_pending());
+  // TODO(shimazu): Temporary CHECK to debug https://crbug.com/736649.
+  CHECK(pending_dispatcher_request_.is_pending());
 
   DCHECK(!instance_host_binding_.is_bound());
   mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo host_ptr_info;
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index 71be1360..e727135 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -87,15 +87,12 @@
     ResourceContext* resource_context)
     : BrowserMessageFilter(kFilteredMessageClasses,
                            arraysize(kFilteredMessageClasses)),
+      BrowserAssociatedInterface<mojom::ServiceWorkerDispatcherHost>(this,
+                                                                     this),
       render_process_id_(render_process_id),
       resource_context_(resource_context),
       channel_ready_(false),
-      weak_factory_(this) {
-  AddAssociatedInterface(
-      mojom::ServiceWorkerDispatcherHost::Name_,
-      base::Bind(&ServiceWorkerDispatcherHost::AddMojoBinding,
-                 base::Unretained(this)));
-}
+      weak_factory_(this) {}
 
 ServiceWorkerDispatcherHost::~ServiceWorkerDispatcherHost() {
   if (GetContext())
@@ -188,13 +185,6 @@
   return handled;
 }
 
-void ServiceWorkerDispatcherHost::AddMojoBinding(
-    mojo::ScopedInterfaceEndpointHandle handle) {
-  bindings_.AddBinding(
-      this,
-      mojom::ServiceWorkerDispatcherHostAssociatedRequest(std::move(handle)));
-}
-
 bool ServiceWorkerDispatcherHost::Send(IPC::Message* message) {
   if (channel_ready_) {
     BrowserMessageFilter::Send(message);
@@ -940,8 +930,8 @@
   if (!GetContext())
     return;
   if (GetContext()->GetProviderHost(render_process_id_, info.provider_id)) {
-    bad_message::ReceivedBadMessage(this,
-                                    bad_message::SWDH_PROVIDER_CREATED_NO_HOST);
+    bad_message::ReceivedBadMessage(
+        this, bad_message::SWDH_PROVIDER_CREATED_DUPLICATE_ID);
     return;
   }
 
@@ -966,7 +956,7 @@
     // Otherwise, completed the initialization of the pre-created host.
     if (info.type != SERVICE_WORKER_PROVIDER_FOR_WINDOW) {
       bad_message::ReceivedBadMessage(
-          this, bad_message::SWDH_PROVIDER_CREATED_ILLEGAL_TYPE);
+          this, bad_message::SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_NOT_WINDOW);
       return;
     }
     provider_host->CompleteNavigationInitialized(render_process_id_,
@@ -977,12 +967,12 @@
     // ServiceWorkerVersion.
     if (info.type == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) {
       bad_message::ReceivedBadMessage(
-          this, bad_message::SWDH_PROVIDER_CREATED_ILLEGAL_TYPE);
+          this, bad_message::SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_CONTROLLER);
       return;
     }
     if (ServiceWorkerUtils::IsBrowserAssignedProviderId(info.provider_id)) {
       bad_message::ReceivedBadMessage(
-          this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST);
+          this, bad_message::SWDH_PROVIDER_CREATED_BAD_ID);
       return;
     }
     GetContext()->AddProviderHost(ServiceWorkerProviderHost::Create(
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.h b/content/browser/service_worker/service_worker_dispatcher_host.h
index 85f93955..32029b3 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.h
+++ b/content/browser/service_worker/service_worker_dispatcher_host.h
@@ -18,9 +18,8 @@
 #include "content/browser/service_worker/service_worker_registration_status.h"
 #include "content/common/service_worker/service_worker.mojom.h"
 #include "content/common/service_worker/service_worker_types.h"
+#include "content/public/browser/browser_associated_interface.h"
 #include "content/public/browser/browser_message_filter.h"
-#include "mojo/public/cpp/bindings/associated_binding_set.h"
-#include "mojo/public/cpp/bindings/strong_associated_binding_set.h"
 
 class GURL;
 
@@ -48,8 +47,9 @@
 // content::ServiceWorkerDispatcherHost. This can be overridden only for
 // testing.
 class CONTENT_EXPORT ServiceWorkerDispatcherHost
-    : public mojom::ServiceWorkerDispatcherHost,
-      public BrowserMessageFilter {
+    : public BrowserMessageFilter,
+      public BrowserAssociatedInterface<mojom::ServiceWorkerDispatcherHost>,
+      public mojom::ServiceWorkerDispatcherHost {
  public:
   ServiceWorkerDispatcherHost(
       int render_process_id,
@@ -116,10 +116,6 @@
   using StatusCallback = base::Callback<void(ServiceWorkerStatusCode status)>;
   enum class ProviderStatus { OK, NO_CONTEXT, DEAD_HOST, NO_HOST, NO_URL };
 
-  // Called when mojom::ServiceWorkerDispatcherHostPtr is created on the
-  // renderer-side.
-  void AddMojoBinding(mojo::ScopedInterfaceEndpointHandle handle);
-
   // mojom::ServiceWorkerDispatcherHost implementation
   void OnProviderCreated(ServiceWorkerProviderHostInfo info) override;
 
@@ -277,8 +273,6 @@
   bool channel_ready_;  // True after BrowserMessageFilter::sender_ != NULL.
   std::vector<std::unique_ptr<IPC::Message>> pending_messages_;
 
-  mojo::AssociatedBindingSet<mojom::ServiceWorkerDispatcherHost> bindings_;
-
   base::WeakPtrFactory<ServiceWorkerDispatcherHost> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerDispatcherHost);
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index 0f5c67b..839812e 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -100,6 +100,44 @@
   context->RemoveProviderHost(process_id, provider_id);
 }
 
+// Wraps associated request for another associated request.
+class AssociatedURLLoaderRelay final : public mojom::URLLoader {
+ public:
+  static void CreateLoaderAndStart(
+      mojom::URLLoaderFactory* factory,
+      mojom::URLLoaderAssociatedRequest request,
+      int routing_id,
+      int request_id,
+      uint32_t options,
+      const ResourceRequest& resource_request,
+      mojom::URLLoaderClientPtr client,
+      const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) {
+    mojom::URLLoaderAssociatedPtr associated_ptr;
+    mojom::URLLoaderAssociatedRequest associated_request =
+        mojo::MakeRequest(&associated_ptr);
+    factory->CreateLoaderAndStart(std::move(associated_request), routing_id,
+                                  request_id, options, resource_request,
+                                  std::move(client), traffic_annotation);
+    mojo::MakeStrongAssociatedBinding(
+        base::MakeUnique<AssociatedURLLoaderRelay>(std::move(associated_ptr)),
+        std::move(request));
+  }
+
+  explicit AssociatedURLLoaderRelay(
+      mojom::URLLoaderAssociatedPtr associated_ptr)
+      : associated_ptr_(std::move(associated_ptr)) {}
+  ~AssociatedURLLoaderRelay() override {}
+  void FollowRedirect() override { associated_ptr_->FollowRedirect(); }
+  void SetPriority(net::RequestPriority priority,
+                   int intra_priority_value) override {
+    associated_ptr_->SetPriority(priority, intra_priority_value);
+  }
+
+ private:
+  mojom::URLLoaderAssociatedPtr associated_ptr_;
+  DISALLOW_COPY_AND_ASSIGN(AssociatedURLLoaderRelay);
+};
+
 // Used by a Service Worker for script loading only during the installation
 // time. For now this is just a proxy loader for the network loader.
 // Eventually this should replace the existing URLRequestJob-based request
@@ -226,10 +264,12 @@
                                 traffic_annotation) override {
     if (!ShouldHandleScriptRequest(resource_request)) {
       // If the request should not be handled by ScriptURLLoader, just
-      // fallback to the network.
+      // fallback to the network. This needs a relaying as we use different
+      // associated message pipes.
       // TODO(kinuko): Record the reason like what we do with netlog in
       // ServiceWorkerContextRequestHandler.
-      loader_factory_getter_->GetNetworkFactory()->get()->CreateLoaderAndStart(
+      AssociatedURLLoaderRelay::CreateLoaderAndStart(
+          loader_factory_getter_->GetNetworkFactory()->get(),
           std::move(request), routing_id, request_id, options, resource_request,
           std::move(client), traffic_annotation);
       return;
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
index 685e576b..52a14ea 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
@@ -21,7 +21,6 @@
 }
 
 WebRtcMediaStreamTrackAdapterMap::AdapterEntry::~AdapterEntry() {
-  DCHECK(!adapter || !adapter->is_initialized());
 }
 
 WebRtcMediaStreamTrackAdapterMap::AdapterRef::AdapterRef(
@@ -35,14 +34,23 @@
 
 WebRtcMediaStreamTrackAdapterMap::AdapterRef::~AdapterRef() {
   DCHECK(map_->main_thread_->BelongsToCurrentThread());
-  base::AutoLock scoped_lock(map_->lock_);
-  adapter_ = nullptr;
-  if (entry()->adapter->HasOneRef()) {
-    entry()->adapter->Dispose();
-    if (type_ == Type::kLocal)
-      map_->local_track_adapters_.erase(it_);
-    else
-      map_->remote_track_adapters_.erase(it_);
+  scoped_refptr<WebRtcMediaStreamTrackAdapter> removed_adapter;
+  {
+    base::AutoLock scoped_lock(map_->lock_);
+    adapter_ = nullptr;
+    if (entry()->adapter->HasOneRef()) {
+      removed_adapter = entry()->adapter;
+      if (type_ == Type::kLocal)
+        map_->local_track_adapters_.erase(it_);
+      else
+        map_->remote_track_adapters_.erase(it_);
+    }
+  }
+  // Dispose the adapter if it was removed. This is performed after releasing
+  // the lock so that it is safe for any disposal mechanism to do synchronous
+  // invokes to the signaling thread without any risk of deadlock.
+  if (removed_adapter) {
+    removed_adapter->Dispose();
   }
 }
 
diff --git a/content/renderer/pepper/pepper_websocket_host.cc b/content/renderer/pepper/pepper_websocket_host.cc
index 3cd58d5..7d80841 100644
--- a/content/renderer/pepper/pepper_websocket_host.cc
+++ b/content/renderer/pepper/pepper_websocket_host.cc
@@ -18,7 +18,6 @@
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebArrayBuffer.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebPepperSocket.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 
 using blink::WebArrayBuffer;
@@ -255,13 +254,11 @@
       renderer_ppapi_host_->GetContainerForInstance(pp_instance());
   if (!container)
     return PP_ERROR_BADARGUMENT;
-  websocket_.reset(WebPepperSocket::Create(container->GetDocument(), this));
+  websocket_ = WebPepperSocket::Create(container->GetDocument(), this);
   DCHECK(websocket_.get());
   if (!websocket_)
     return PP_ERROR_NOTSUPPORTED;
 
-  // Set receiving binary object type.
-  websocket_->SetBinaryType(WebPepperSocket::kBinaryTypeArrayBuffer);
   websocket_->Connect(web_url, web_protocols);
 
   connect_reply_ = context->MakeReplyMessageContext();
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index 142e159..b08fc31 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -245,6 +245,7 @@
 }
 
 source_set("main") {
+  configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "chrome_exe_main.mm",
   ]
diff --git a/ios/chrome/app/chrome_exe_main.mm b/ios/chrome/app/chrome_exe_main.mm
index 52e072ca..308e50d 100644
--- a/ios/chrome/app/chrome_exe_main.mm
+++ b/ios/chrome/app/chrome_exe_main.mm
@@ -12,6 +12,10 @@
 #include "ios/chrome/browser/crash_report/crash_keys.h"
 #include "ios/chrome/common/channel_info.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace {
 
 NSString* const kUIApplicationDelegateInfoKey = @"UIApplicationDelegate";
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index e7ab115d..0686c956 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -1118,9 +1118,9 @@
 }
 
 - (void)startFreeMemoryMonitoring {
-  base::PostTaskWithTraits(
-      FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
-      base::BindOnce(&ios_internal::AsynchronousFreeMemoryMonitor));
+  // No need for a post-task or a deferred initialisation as the memory
+  // monitoring already happens on a background sequence.
+  StartFreeMemoryMonitor();
 }
 
 - (void)scheduleLowPriorityStartupTasks {
@@ -1924,8 +1924,8 @@
       runBlockIfNecessary:kPrefObserverInit];
   DCHECK(_localStatePrefObserverBridge);
   _settingsNavigationController = [SettingsNavigationController
-      newSettingsMainControllerWithMainBrowserState:_mainBrowserState
-                                           delegate:self];
+      newSettingsMainControllerWithBrowserState:_mainBrowserState
+                                       delegate:self];
   [[self topPresentedViewController]
       presentViewController:_settingsNavigationController
                    animated:YES
diff --git a/ios/chrome/app/memory_monitor.h b/ios/chrome/app/memory_monitor.h
index eb2642f..540911c 100644
--- a/ios/chrome/app/memory_monitor.h
+++ b/ios/chrome/app/memory_monitor.h
@@ -5,15 +5,8 @@
 #ifndef IOS_CHROME_APP_MEMORY_MONITOR_H_
 #define IOS_CHROME_APP_MEMORY_MONITOR_H_
 
-namespace ios_internal {
-
-// Timer to launch [UpdateBreakpadMemoryValues] every 5 seconds.
-void AsynchronousFreeMemoryMonitor();
-
-// Checks the values of free RAM and free disk space and updates breakpad with
-// these values.
-void UpdateBreakpadMemoryValues();
-
-}  // namespace ios_internal
+// Starts the memory monitor that periodically updates the amount of free
+// memory and free disk space with breakpad in the background.
+void StartFreeMemoryMonitor();
 
 #endif  // IOS_CHROME_APP_MEMORY_MONITOR_H_
diff --git a/ios/chrome/app/memory_monitor.mm b/ios/chrome/app/memory_monitor.mm
index 927afc6..f971388 100644
--- a/ios/chrome/app/memory_monitor.mm
+++ b/ios/chrome/app/memory_monitor.mm
@@ -14,33 +14,47 @@
 #import "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/sys_info.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/threading/thread_restrictions.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
-#include "ios/web/public/web_thread.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
 
-namespace ios_internal {
+namespace {
+// Delay between each invocations of |UpdateBreakpadMemoryValues|.
+const int64_t kMemoryMonitorDelayInSeconds = 30;
 
-void AsynchronousFreeMemoryMonitor() {
-  UpdateBreakpadMemoryValues();
-  web::WebThread::PostDelayedTask(
-      web::WebThread::FILE, FROM_HERE,
-      base::Bind(&ios_internal::AsynchronousFreeMemoryMonitor),
-      base::TimeDelta::FromSeconds(30));
-}
-
+// Checks the values of free RAM and free disk space and updates breakpad with
+// these values.
 void UpdateBreakpadMemoryValues() {
-  int freeMemory =
+  base::ThreadRestrictions::AssertIOAllowed();
+  const int free_memory =
       static_cast<int>(base::SysInfo::AmountOfAvailablePhysicalMemory() / 1024);
-  breakpad_helper::SetCurrentFreeMemoryInKB(freeMemory);
+  breakpad_helper::SetCurrentFreeMemoryInKB(free_memory);
   NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                        NSUserDomainMask, YES);
   NSString* value = base::mac::ObjCCastStrict<NSString>([paths lastObject]);
   base::FilePath filePath = base::FilePath(base::SysNSStringToUTF8(value));
-  int freeDiskSpace =
+  const int free_disk_space =
       static_cast<int>(base::SysInfo::AmountOfFreeDiskSpace(filePath) / 1024);
-  breakpad_helper::SetCurrentFreeDiskInKB(freeDiskSpace);
+  breakpad_helper::SetCurrentFreeDiskInKB(free_disk_space);
 }
+
+// Invokes |UpdateBreakpadMemoryValues| and schedules itself to be called
+// after |kMemoryMonitorDelayInSeconds|.
+void AsynchronousFreeMemoryMonitor() {
+  UpdateBreakpadMemoryValues();
+  base::PostDelayedTaskWithTraits(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
+      base::BindOnce(&AsynchronousFreeMemoryMonitor),
+      base::TimeDelta::FromSeconds(kMemoryMonitorDelayInSeconds));
+}
+}  // namespace
+
+void StartFreeMemoryMonitor() {
+  base::PostTaskWithTraits(FROM_HERE,
+                           {base::MayBlock(), base::TaskPriority::BACKGROUND},
+                           base::BindOnce(&AsynchronousFreeMemoryMonitor));
 }
diff --git a/ios/chrome/browser/content_suggestions/BUILD.gn b/ios/chrome/browser/content_suggestions/BUILD.gn
index e0ac8ee..40964dd 100644
--- a/ios/chrome/browser/content_suggestions/BUILD.gn
+++ b/ios/chrome/browser/content_suggestions/BUILD.gn
@@ -9,6 +9,9 @@
     "content_suggestions_category_wrapper.mm",
     "content_suggestions_coordinator.h",
     "content_suggestions_coordinator.mm",
+    "content_suggestions_header_controller.h",
+    "content_suggestions_header_controller.mm",
+    "content_suggestions_header_controller_delegate.h",
     "content_suggestions_header_provider.h",
     "content_suggestions_mediator.h",
     "content_suggestions_mediator.mm",
@@ -38,12 +41,15 @@
     "//ios/chrome/browser/ui/collection_view/cells",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/content_suggestions",
+    "//ios/chrome/browser/ui/content_suggestions:content_suggestions_util",
     "//ios/chrome/browser/ui/content_suggestions/cells",
     "//ios/chrome/browser/ui/content_suggestions/cells:cells_ui",
     "//ios/chrome/browser/ui/content_suggestions/identifier",
     "//ios/chrome/browser/ui/favicon",
+    "//ios/chrome/browser/ui/ntp:ntp_header",
     "//ios/chrome/browser/ui/ntp:ntp_internal",
     "//ios/chrome/browser/ui/reading_list",
+    "//ios/chrome/browser/ui/toolbar",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/images",
     "//ios/web",
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.h b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.h
index 121b789e..572e226 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.h
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.h
@@ -12,6 +12,7 @@
 }
 
 @protocol UrlLoader;
+class WebStateList;
 
 // Coordinator to manage the Suggestions UI via a
 // ContentSuggestionsViewController.
@@ -21,6 +22,8 @@
 @property(nonatomic, assign) ios::ChromeBrowserState* browserState;
 // URLLoader used to open pages.
 @property(nonatomic, weak) id<UrlLoader> URLLoader;
+@property(nonatomic, assign) WebStateList* webStateList;
+@property(nonatomic, weak) id dispatcher;
 // Whether the Suggestions UI is displayed. If this is true, start is a no-op.
 @property(nonatomic, readonly) BOOL visible;
 
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
index 855597d..172cf0f 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
@@ -16,6 +16,7 @@
 #include "components/reading_list/core/reading_list_model.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/content_suggestions/content_suggestions_header_controller.h"
 #import "ios/chrome/browser/content_suggestions/content_suggestions_mediator.h"
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
 #import "ios/chrome/browser/metrics/new_tab_page_uma.h"
@@ -31,6 +32,7 @@
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/identifier/content_suggestion_identifier.h"
+#import "ios/chrome/browser/ui/ntp/google_landing_mediator.h"
 #import "ios/chrome/browser/ui/ntp/notification_promo_whats_new.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #import "ios/chrome/browser/ui/url_loader.h"
@@ -52,6 +54,9 @@
     ContentSuggestionsViewController* suggestionsViewController;
 @property(nonatomic, strong)
     ContentSuggestionsMediator* contentSuggestionsMediator;
+@property(nonatomic, strong)
+    ContentSuggestionsHeaderController* headerController;
+@property(nonatomic, strong) GoogleLandingMediator* googleLandingMediator;
 
 // Opens the |URL| in a new tab |incognito| or not.
 - (void)openNewTabWithURL:(const GURL&)URL incognito:(BOOL)incognito;
@@ -71,6 +76,10 @@
 @synthesize URLLoader = _URLLoader;
 @synthesize visible = _visible;
 @synthesize contentSuggestionsMediator = _contentSuggestionsMediator;
+@synthesize headerController = _headerController;
+@synthesize googleLandingMediator = _googleLandingMediator;
+@synthesize webStateList = _webStateList;
+@synthesize dispatcher = _dispatcher;
 
 - (void)start {
   if (self.visible || !self.browserState) {
@@ -86,6 +95,16 @@
           self.browserState);
   contentSuggestionsService->remote_suggestions_scheduler()->OnNTPOpened();
 
+  self.headerController = [[ContentSuggestionsHeaderController alloc] init];
+  self.headerController.dispatcher = self.dispatcher;
+  self.headerController.readingListModel =
+      ReadingListModelFactory::GetForBrowserState(self.browserState);
+  self.googleLandingMediator =
+      [[GoogleLandingMediator alloc] initWithConsumer:self.headerController
+                                         browserState:self.browserState
+                                           dispatcher:self.dispatcher
+                                         webStateList:self.webStateList];
+
   self.contentSuggestionsMediator = [[ContentSuggestionsMediator alloc]
       initWithContentService:contentSuggestionsService
             largeIconService:IOSChromeLargeIconServiceFactory::
@@ -93,6 +112,7 @@
              mostVisitedSite:IOSMostVisitedSitesFactory::NewForBrowserState(
                                  self.browserState)];
   self.contentSuggestionsMediator.commandHandler = self;
+  self.contentSuggestionsMediator.headerProvider = self.headerController;
 
   self.suggestionsViewController = [[ContentSuggestionsViewController alloc]
       initWithStyle:CollectionViewControllerStyleDefault
@@ -121,6 +141,9 @@
   self.navigationController = nil;
   self.contentSuggestionsMediator = nil;
   self.alertCoordinator = nil;
+  self.headerController = nil;
+  [self.googleLandingMediator shutdown];
+  self.googleLandingMediator = nil;
   _visible = NO;
 }
 
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.h b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.h
new file mode 100644
index 0000000..3d3e743a
--- /dev/null
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.h
@@ -0,0 +1,34 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/content_suggestions/content_suggestions_header_provider.h"
+#import "ios/chrome/browser/ui/ntp/google_landing_consumer.h"
+
+@protocol ContentSuggestionsHeaderControllerDelegate;
+@protocol ContentSuggestionsHeaderControllerCommandHandler;
+@protocol OmniboxFocuser;
+@protocol UrlLoader;
+class ReadingListModel;
+
+// Controller for the header containing the logo and the fake omnibox, handling
+// the interactions between the header and the collection, and the rest of the
+// application.
+@interface ContentSuggestionsHeaderController
+    : NSObject<ContentSuggestionsHeaderProvider, GoogleLandingConsumer>
+
+@property(nonatomic, weak) id<UrlLoader, OmniboxFocuser> dispatcher;
+@property(nonatomic, weak) id<ContentSuggestionsHeaderControllerDelegate>
+    delegate;
+@property(nonatomic, weak) id<ContentSuggestionsHeaderControllerCommandHandler>
+    commandHandler;
+@property(nonatomic, assign) ReadingListModel* readingListModel;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_H_
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.mm b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.mm
new file mode 100644
index 0000000..34c5dcb
--- /dev/null
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller.mm
@@ -0,0 +1,315 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/content_suggestions/content_suggestions_header_controller.h"
+
+#include "base/logging.h"
+#include "base/metrics/user_metrics.h"
+#include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/content_suggestions/content_suggestions_header_controller_delegate.h"
+#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
+#import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_header_view.h"
+#import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
+#import "ios/chrome/browser/ui/uikit_ui_util.h"
+#import "ios/chrome/browser/ui/url_loader.h"
+#include "ui/base/l10n/l10n_util.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using base::UserMetricsAction;
+
+namespace {
+const UIEdgeInsets kSearchBoxStretchInsets = {3, 3, 3, 3};
+const CGFloat kHintLabelSidePadding = 12;
+}  // namespace
+
+@interface ContentSuggestionsHeaderController ()
+
+// Whether the Google logo or doodle is being shown.
+@property(nonatomic, assign) BOOL logoIsShowing;
+
+// |YES| if this consumer is has voice search enabled.
+@property(nonatomic, assign) BOOL voiceSearchIsEnabled;
+
+// |YES| if a what's new promo can be displayed.
+@property(nonatomic, assign) BOOL promoCanShow;
+
+// Exposes view and methods to drive the doodle.
+@property(nonatomic, weak) id<LogoVendor> logoVendor;
+
+// |YES| if the google landing toolbar can show the forward arrow, cached and
+// pushed into the header view.
+@property(nonatomic, assign) BOOL canGoForward;
+
+// |YES| if the google landing toolbar can show the back arrow, cached and
+// pushed into the header view.
+@property(nonatomic, assign) BOOL canGoBack;
+
+// Gets the icon of a what's new promo.
+// TODO(crbug.com/694750): This should not be WhatsNewIcon.
+@property(nonatomic, assign) WhatsNewIcon promoIcon;
+
+// Gets the text of a what's new promo.
+@property(nonatomic, copy) NSString* promoText;
+
+// |YES| if this NTP panel is visible.  When set to |NO| various UI updates are
+// ignored.
+@property(nonatomic, assign) BOOL isShowing;
+
+// |YES| when notifications indicate the omnibox is focused.
+@property(nonatomic, assign) BOOL omniboxFocused;
+
+// The number of tabs to show in the google landing fake toolbar.
+@property(nonatomic, assign) int tabCount;
+
+@property(nonatomic, strong) NewTabPageHeaderView* headerView;
+@property(nonatomic, strong) UIButton* fakeOmnibox;
+@property(nonatomic, strong) NSLayoutConstraint* hintLabelLeadingConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* voiceTapTrailingConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* doodleHeightConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* doodleTopMarginConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxWidthConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxHeightConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxTopMarginConstraint;
+@property(nonatomic, assign) BOOL logoFetched;
+
+@end
+
+@implementation ContentSuggestionsHeaderController
+
+@synthesize dispatcher = _dispatcher;
+@synthesize delegate = _delegate;
+@synthesize commandHandler = _commandHandler;
+@synthesize readingListModel = _readingListModel;
+
+@synthesize logoVendor = _logoVendor;
+@synthesize promoCanShow = _promoCanShow;
+@synthesize canGoForward = _canGoForward;
+@synthesize canGoBack = _canGoBack;
+@synthesize promoIcon = _promoIcon;
+@synthesize promoText = _promoText;
+@synthesize isShowing = _isShowing;
+@synthesize omniboxFocused = _omniboxFocused;
+@synthesize tabCount = _tabCount;
+
+@synthesize headerView = _headerView;
+@synthesize fakeOmnibox = _fakeOmnibox;
+@synthesize hintLabelLeadingConstraint = _hintLabelLeadingConstraint;
+@synthesize voiceTapTrailingConstraint = _voiceTapTrailingConstraint;
+@synthesize doodleHeightConstraint = _doodleHeightConstraint;
+@synthesize doodleTopMarginConstraint = _doodleTopMarginConstraint;
+@synthesize fakeOmniboxWidthConstraint = _fakeOmniboxWidthConstraint;
+@synthesize fakeOmniboxHeightConstraint = _fakeOmniboxHeightConstraint;
+@synthesize fakeOmniboxTopMarginConstraint = _fakeOmniboxTopMarginConstraint;
+@synthesize voiceSearchIsEnabled = _voiceSearchIsEnabled;
+@synthesize logoIsShowing = _logoIsShowing;
+@synthesize logoFetched = _logoFetched;
+
+#pragma mark - ContentSuggestionsHeaderProvider
+
+- (UIView*)headerForWidth:(CGFloat)width {
+  if (!self.headerView) {
+    self.headerView = [[NewTabPageHeaderView alloc] init];
+    [self addFakeOmnibox];
+
+    [self.headerView addSubview:self.logoVendor.view];
+    [self.headerView addSubview:self.fakeOmnibox];
+    self.logoVendor.view.translatesAutoresizingMaskIntoConstraints = NO;
+    self.fakeOmnibox.translatesAutoresizingMaskIntoConstraints = NO;
+
+    self.fakeOmniboxWidthConstraint = [self.fakeOmnibox.widthAnchor
+        constraintEqualToConstant:content_suggestions::searchFieldWidth(width)];
+    [self addConstraintsForLogoView:self.logoVendor.view
+                        fakeOmnibox:self.fakeOmnibox
+                      andHeaderView:self.headerView];
+
+    if (!IsIPadIdiom()) {
+      // iPhone header also contains a toolbar since the normal toolbar is
+      // hidden.
+      [_headerView addToolbarWithReadingListModel:self.readingListModel
+                                       dispatcher:self.dispatcher];
+      [_headerView setToolbarTabCount:self.tabCount];
+      [_headerView setCanGoForward:self.canGoForward];
+      [_headerView setCanGoBack:self.canGoBack];
+    }
+
+    [self.headerView addViewsToSearchField:self.fakeOmnibox];
+    [self.logoVendor fetchDoodle];
+  }
+  return self.headerView;
+}
+
+#pragma mark - Private
+
+// Initialize and add a search field tap target and a voice search button.
+- (void)addFakeOmnibox {
+  self.fakeOmnibox = [[UIButton alloc] init];
+  if (IsIPadIdiom()) {
+    UIImage* searchBoxImage = [[UIImage imageNamed:@"ntp_google_search_box"]
+        resizableImageWithCapInsets:kSearchBoxStretchInsets];
+    [self.fakeOmnibox setBackgroundImage:searchBoxImage
+                                forState:UIControlStateNormal];
+  }
+  [self.fakeOmnibox setAdjustsImageWhenHighlighted:NO];
+  [self.fakeOmnibox addTarget:self
+                       action:@selector(fakeOmniboxTapped:)
+             forControlEvents:UIControlEventTouchUpInside];
+  [self.fakeOmnibox
+      setAccessibilityLabel:l10n_util::GetNSString(IDS_OMNIBOX_EMPTY_HINT)];
+  // Set isAccessibilityElement to NO so that Voice Search button is accessible.
+  [self.fakeOmnibox setIsAccessibilityElement:NO];
+
+  // Set up fakebox hint label.
+  UILabel* searchHintLabel = [[UILabel alloc] init];
+  content_suggestions::configureSearchHintLabel(searchHintLabel,
+                                                self.fakeOmnibox);
+
+  self.hintLabelLeadingConstraint = [searchHintLabel.leadingAnchor
+      constraintEqualToAnchor:[self.fakeOmnibox leadingAnchor]
+                     constant:kHintLabelSidePadding];
+  [_hintLabelLeadingConstraint setActive:YES];
+
+  // Add a voice search button.
+  UIButton* voiceTapTarget = [[UIButton alloc] init];
+  content_suggestions::configureVoiceSearchButton(voiceTapTarget,
+                                                  self.fakeOmnibox);
+
+  self.voiceTapTrailingConstraint = [voiceTapTarget.trailingAnchor
+      constraintEqualToAnchor:[self.fakeOmnibox trailingAnchor]];
+  [NSLayoutConstraint activateConstraints:@[
+    [searchHintLabel.trailingAnchor
+        constraintEqualToAnchor:voiceTapTarget.leadingAnchor],
+    _voiceTapTrailingConstraint
+  ]];
+
+  if (self.voiceSearchIsEnabled) {
+    [voiceTapTarget addTarget:self
+                       action:@selector(loadVoiceSearch:)
+             forControlEvents:UIControlEventTouchUpInside];
+    [voiceTapTarget addTarget:self
+                       action:@selector(preloadVoiceSearch:)
+             forControlEvents:UIControlEventTouchDown];
+  } else {
+    [voiceTapTarget setEnabled:NO];
+  }
+}
+
+- (void)loadVoiceSearch:(id)sender {
+  DCHECK(self.voiceSearchIsEnabled);
+  base::RecordAction(UserMetricsAction("MobileNTPMostVisitedVoiceSearch"));
+  [sender chromeExecuteCommand:sender];
+}
+
+- (void)preloadVoiceSearch:(id)sender {
+  DCHECK(self.voiceSearchIsEnabled);
+  [sender removeTarget:self
+                action:@selector(preloadVoiceSearch:)
+      forControlEvents:UIControlEventTouchDown];
+
+  // Use a GenericChromeCommand because |sender| already has a tag set for a
+  // different command.
+  GenericChromeCommand* command =
+      [[GenericChromeCommand alloc] initWithTag:IDC_PRELOAD_VOICE_SEARCH];
+  [sender chromeExecuteCommand:command];
+}
+
+- (void)fakeOmniboxTapped:(id)sender {
+  [self.dispatcher focusFakebox];
+}
+
+// If Google is not the default search engine, hide the logo, doodle and
+// fakebox.
+- (void)updateLogoAndFakeboxDisplay {
+  // TODO(crbug.com/700375): implement this.
+}
+
+// Adds the constraints for the |logoView|, the |fakeomnibox| related to the
+// |headerView|. It also sets the properties constraints related to those views.
+- (void)addConstraintsForLogoView:(UIView*)logoView
+                      fakeOmnibox:(UIView*)fakeOmnibox
+                    andHeaderView:(UIView*)headerView {
+  self.doodleTopMarginConstraint = [logoView.topAnchor
+      constraintEqualToAnchor:headerView.topAnchor
+                     constant:content_suggestions::doodleTopMargin()];
+  self.doodleHeightConstraint = [logoView.heightAnchor
+      constraintEqualToConstant:content_suggestions::doodleHeight(
+                                    self.logoIsShowing)];
+  self.fakeOmniboxHeightConstraint = [fakeOmnibox.heightAnchor
+      constraintEqualToConstant:content_suggestions::kSearchFieldHeight];
+  self.fakeOmniboxTopMarginConstraint = [fakeOmnibox.topAnchor
+      constraintEqualToAnchor:logoView.bottomAnchor
+                     constant:content_suggestions::searchFieldTopMargin()];
+  [NSLayoutConstraint activateConstraints:@[
+    self.doodleTopMarginConstraint,
+    self.doodleHeightConstraint,
+    self.fakeOmniboxWidthConstraint,
+    self.fakeOmniboxHeightConstraint,
+    self.fakeOmniboxTopMarginConstraint,
+    [logoView.widthAnchor constraintEqualToAnchor:headerView.widthAnchor],
+    [logoView.leadingAnchor constraintEqualToAnchor:headerView.leadingAnchor],
+    [fakeOmnibox.centerXAnchor
+        constraintEqualToAnchor:headerView.centerXAnchor],
+  ]];
+}
+
+#pragma mark - GoogleLandingConsumer
+
+- (void)setLogoIsShowing:(BOOL)logoIsShowing {
+  _logoIsShowing = logoIsShowing;
+  [self updateLogoAndFakeboxDisplay];
+}
+
+- (void)setMaximumMostVisitedSitesShown:
+    (NSUInteger)maximumMostVisitedSitesShown {
+}
+
+- (void)mostVisitedDataUpdated {
+  // Do nothing as it is handled in the ContentSuggestionsMediator.
+}
+
+- (void)mostVisitedIconMadeAvailableAtIndex:(NSUInteger)index {
+  // Do nothing as it is handled in the ContentSuggestionsMediator.
+}
+
+- (void)setTabCount:(int)tabCount {
+  _tabCount = tabCount;
+  [self.headerView setToolbarTabCount:tabCount];
+}
+
+- (void)setCanGoForward:(BOOL)canGoForward {
+  _canGoForward = canGoForward;
+  [self.headerView setCanGoForward:self.canGoForward];
+}
+
+- (void)setCanGoBack:(BOOL)canGoBack {
+  _canGoBack = canGoBack;
+  [self.headerView setCanGoBack:self.canGoBack];
+}
+
+- (void)locationBarBecomesFirstResponder {
+  if (!self.isShowing)
+    return;
+
+  self.omniboxFocused = YES;
+  [self.commandHandler shiftTilesUp];
+}
+
+- (void)locationBarResignsFirstResponder {
+  if (!self.isShowing && ![self.delegate isScrolledToTop])
+    return;
+
+  self.omniboxFocused = NO;
+  if ([self.delegate isContextMenuVisible]) {
+    return;
+  }
+
+  [self.commandHandler shiftTilesDown];
+}
+
+@end
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_controller_delegate.h b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller_delegate.h
new file mode 100644
index 0000000..f1f16481
--- /dev/null
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_controller_delegate.h
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_DELEGATE_H_
+#define IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_DELEGATE_H_
+
+#import <UIKit/UIKit.h>
+
+@protocol ContentSuggestionsHeaderControllerDelegate
+
+- (BOOL)isContextMenuVisible;
+- (BOOL)isScrolledToTop;
+
+@end
+
+@protocol ContentSuggestionsHeaderControllerCommandHandler
+
+- (void)shiftTilesDown;
+- (void)shiftTilesUp;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLER_DELEGATE_H_
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_header_provider.h b/ios/chrome/browser/content_suggestions/content_suggestions_header_provider.h
index aef3ff89..385fc79 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_header_provider.h
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_header_provider.h
@@ -8,7 +8,7 @@
 // Object providing a header view for the content suggestions.
 @protocol ContentSuggestionsHeaderProvider
 
-- (nullable UIView*)header;
+- (nullable UIView*)headerForWidth:(CGFloat)width;
 
 @end
 
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
index e0dc77209..8e0f5f95 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -334,8 +334,8 @@
   self.contentService->DismissSuggestion(suggestion_id);
 }
 
-- (UIView*)headerView {
-  return [self.headerProvider header];
+- (UIView*)headerViewForWidth:(CGFloat)width {
+  return [self.headerProvider headerForWidth:width];
 }
 
 #pragma mark - ContentSuggestionsServiceObserver
diff --git a/ios/chrome/browser/native_app_launcher/BUILD.gn b/ios/chrome/browser/native_app_launcher/BUILD.gn
index 48f7e41..39eebc79 100644
--- a/ios/chrome/browser/native_app_launcher/BUILD.gn
+++ b/ios/chrome/browser/native_app_launcher/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 source_set("native_app_launcher") {
+  configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "ios_appstore_ids.h",
     "ios_appstore_ids.mm",
diff --git a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
index 672eaa3..330ee3c 100644
--- a/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
+++ b/ios/chrome/browser/native_app_launcher/ios_appstore_ids.mm
@@ -4,6 +4,10 @@
 
 #include "ios/chrome/browser/native_app_launcher/ios_appstore_ids.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 const char kIOSAppStoreGmail[] = "422689480";
 const char kIOSAppStoreGoogleDocs[] = "842842640";
 const char kIOSAppStoreGoogleDrive[] = "507874739";
diff --git a/ios/chrome/browser/native_app_launcher/native_app_infobar_controller.mm b/ios/chrome/browser/native_app_launcher/native_app_infobar_controller.mm
index 8d3a553c..ae68f8c 100644
--- a/ios/chrome/browser/native_app_launcher/native_app_infobar_controller.mm
+++ b/ios/chrome/browser/native_app_launcher/native_app_infobar_controller.mm
@@ -5,7 +5,6 @@
 #import "ios/chrome/browser/native_app_launcher/native_app_infobar_controller.h"
 
 #include "base/logging.h"
-#include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h"
 #import "ios/chrome/browser/ui/infobars/infobar_view.h"
@@ -14,6 +13,10 @@
 #import "ios/public/provider/chrome/browser/native_app_launcher/native_app_types.h"
 #include "ui/base/l10n/l10n_util.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 @interface NativeAppInfoBarController ()
 
 // Action for any of the user defined buttons.
@@ -36,11 +39,11 @@
 
 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate
                           frame:(CGRect)frame {
-  base::scoped_nsobject<InfoBarView> infoBarView;
+  InfoBarView* infoBarView;
   nativeAppInfoBarDelegate_ = static_cast<NativeAppInfoBarDelegate*>(delegate);
   DCHECK(nativeAppInfoBarDelegate_);
-  infoBarView.reset(
-      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]);
+  infoBarView =
+      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate];
 
   // Lays out widgets common to all NativeAppInfobars.
   [infoBarView
@@ -96,7 +99,7 @@
       break;
     }
   }
-  return [[infoBarView retain] autorelease];
+  return infoBarView;
 }
 
 - (void)infoBarButtonDidPress:(UIButton*)button {
diff --git a/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h b/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h
index 9d84758..179d16d 100644
--- a/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h
+++ b/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h
@@ -64,7 +64,7 @@
 
  private:
   bool ShouldExpire(const NavigationDetails& details) const override;
-  id<NativeAppNavigationControllerProtocol> controller_;
+  __weak id<NativeAppNavigationControllerProtocol> controller_;
   net::URLRequestContextGetter* requestContextGetter_;
   GURL page_url_;
   NativeAppControllerType type_;
diff --git a/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.mm b/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.mm
index 66c83f8..9e75ac9 100644
--- a/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.mm
+++ b/ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.mm
@@ -9,7 +9,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/mac/scoped_nsobject.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/infobars/core/infobar_manager.h"
@@ -18,6 +17,10 @@
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace native_app_infobar {
 const CGSize kSmallIconSize = {29.0, 29.0};
 }  // namespace native_app_infobar
@@ -40,8 +43,8 @@
   auto infobar =
       base::MakeUnique<InfoBarIOS>(base::MakeUnique<NativeAppInfoBarDelegate>(
           controller_protocol, page_url, type));
-  base::scoped_nsobject<NativeAppInfoBarController> controller(
-      [[NativeAppInfoBarController alloc] initWithDelegate:infobar.get()]);
+  NativeAppInfoBarController* controller =
+      [[NativeAppInfoBarController alloc] initWithDelegate:infobar.get()];
   infobar->SetController(controller);
   return !!manager->AddInfoBar(std::move(infobar));
 }
diff --git a/ios/chrome/browser/translate/BUILD.gn b/ios/chrome/browser/translate/BUILD.gn
index abc6ff6..4cee55ca 100644
--- a/ios/chrome/browser/translate/BUILD.gn
+++ b/ios/chrome/browser/translate/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 source_set("translate") {
+  configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "after_translate_infobar_controller.h",
     "after_translate_infobar_controller.mm",
diff --git a/ios/chrome/browser/translate/after_translate_infobar_controller.mm b/ios/chrome/browser/translate/after_translate_infobar_controller.mm
index e4d57c1c..a14bb2a1 100644
--- a/ios/chrome/browser/translate/after_translate_infobar_controller.mm
+++ b/ios/chrome/browser/translate/after_translate_infobar_controller.mm
@@ -4,7 +4,6 @@
 
 #include "ios/chrome/browser/translate/after_translate_infobar_controller.h"
 
-#include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
@@ -15,6 +14,10 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/image/image.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace {
 enum AlwaysTranslateSwitchState {
   ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED,
@@ -40,11 +43,11 @@
 
 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate
                           frame:(CGRect)frame {
-  base::scoped_nsobject<InfoBarView> infoBarView;
+  InfoBarView* infoBarView;
   _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate();
   DCHECK(_translateInfoBarDelegate);
-  infoBarView.reset(
-      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]);
+  infoBarView =
+      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate];
   // Icon
   gfx::Image icon = _translateInfoBarDelegate->GetIcon();
   if (!icon.IsEmpty())
@@ -68,9 +71,9 @@
   NSString* original = base::SysUTF16ToNSString(stdOriginal);
   NSString* target = base::SysUTF16ToNSString(
       _translateInfoBarDelegate->target_language_name());
-  base::scoped_nsobject<NSString> label(
+  NSString* label =
       [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original,
-                                       label2, label3, target]);
+                                       label2, label3, target];
   [infoBarView addLabel:label];
   // Close button.
   [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::CLOSE
@@ -98,7 +101,7 @@
                     target:self
                     action:@selector(infoBarSwitchDidPress:)];
   }
-  return [[infoBarView retain] autorelease];
+  return infoBarView;
 }
 
 #pragma mark - Handling of User Events
diff --git a/ios/chrome/browser/translate/before_translate_infobar_controller.mm b/ios/chrome/browser/translate/before_translate_infobar_controller.mm
index 59e97ee..d94714a0 100644
--- a/ios/chrome/browser/translate/before_translate_infobar_controller.mm
+++ b/ios/chrome/browser/translate/before_translate_infobar_controller.mm
@@ -7,9 +7,7 @@
 #include <stddef.h>
 #import <UIKit/UIKit.h>
 
-#include "base/ios/weak_nsobject.h"
 #include "base/logging.h"
-#include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
@@ -20,6 +18,10 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/image/image.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace {
 
 CGFloat kNavigationBarHeight = 44;
@@ -76,7 +78,7 @@
   DCHECK_EQ(0, component);
   UILabel* label = [view isKindOfClass:[UILabel class]]
                        ? (UILabel*)view
-                       : [[[UILabel alloc] init] autorelease];
+                       : [[UILabel alloc] init];
   [label setText:base::SysUTF16ToNSString(
                      _translateInfoBarDelegate->language_name_at(row))];
   [label setTextAlignment:NSTextAlignmentCenter];
@@ -112,17 +114,17 @@
   translate::TranslateInfoBarDelegate* _translateInfoBarDelegate;  // weak
   // A fullscreen view that catches all touch events and contains a UIPickerView
   // and a UINavigationBar.
-  base::scoped_nsobject<UIView> _languageSelectionView;
+  UIView* _languageSelectionView;
   // Stores whether the user is currently choosing in the UIPickerView the
   // original language, or the target language.
   NSUInteger _languageSelectionType;
   // The language picker.
-  base::scoped_nsobject<UIPickerView> _languagePicker;
+  UIPickerView* _languagePicker;
   // Navigation bar associated with the picker with "Done" and "Cancel" buttons.
-  base::scoped_nsobject<UINavigationBar> _navigationBar;
+  UINavigationBar* _navigationBar;
   // The controller of the languagePicker. Needs to be an ivar because
   // |_languagePicker| does not retain it.
-  base::scoped_nsobject<LanguagePickerController> _languagePickerController;
+  LanguagePickerController* _languagePickerController;
 }
 
 #pragma mark -
@@ -130,10 +132,10 @@
 
 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate
                           frame:(CGRect)frame {
-  base::scoped_nsobject<InfoBarView> infoBarView;
+  InfoBarView* infoBarView;
   _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate();
-  infoBarView.reset(
-      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]);
+  infoBarView =
+      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate];
   // Icon
   gfx::Image icon = _translateInfoBarDelegate->GetIcon();
   if (!icon.IsEmpty())
@@ -155,7 +157,7 @@
                      tag2:TranslateInfoBarIOSTag::BEFORE_DENY
                    target:self
                    action:@selector(infoBarButtonDidPress:)];
-  return [[infoBarView retain] autorelease];
+  return infoBarView;
 }
 
 - (void)updateInfobarLabelOnView:(InfoBarView*)view {
@@ -174,7 +176,7 @@
       l10n_util::GetNSStringF(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE_IOS,
                               originalLanguageWithLink, targetLanguageWithLink);
 
-  base::WeakNSObject<BeforeTranslateInfoBarController> weakSelf(self);
+  __weak BeforeTranslateInfoBarController* weakSelf = self;
   [view addLabel:label
           action:^(NSUInteger tag) {
             [weakSelf infobarLinkDidPress:tag];
@@ -209,7 +211,7 @@
   // delegate.
   [_languagePicker setDataSource:nil];
   [_languagePicker setDelegate:nil];
-  _languagePickerController.reset();
+  _languagePickerController = nil;
   // Animate the picker away.
   CGRect languagePickerFrame = [_languagePicker frame];
   CGRect navigationBarFrame = [_navigationBar frame];
@@ -217,16 +219,16 @@
       languagePickerFrame.size.height + navigationBarFrame.size.height;
   languagePickerFrame.origin.y += animationHeight;
   navigationBarFrame.origin.y += animationHeight;
-  auto blockLanguagePicker(_languagePicker);
-  auto blockNavigationBar(_navigationBar);
-  _languagePicker.reset();
-  _navigationBar.reset();
+  UIPickerView* blockLanguagePicker = _languagePicker;
+  UINavigationBar* blockNavigationBar = _navigationBar;
+  _languagePicker = nil;
+  _navigationBar = nil;
   void (^animations)(void) = ^{
-    blockLanguagePicker.get().frame = languagePickerFrame;
-    blockNavigationBar.get().frame = navigationBarFrame;
+    blockLanguagePicker.frame = languagePickerFrame;
+    blockNavigationBar.frame = navigationBarFrame;
   };
-  auto blockSelectionView(_languageSelectionView);
-  _languageSelectionView.reset();
+  UIView* blockSelectionView = _languageSelectionView;
+  _languageSelectionView = nil;
   void (^completion)(BOOL finished) = ^(BOOL finished) {
     [blockSelectionView removeFromSuperview];
   };
@@ -272,8 +274,8 @@
   CGRect languageSelectionViewFrame =
       CGRectMake(0, parentFrame.size.height - totalPickerHeight,
                  parentFrame.size.width, totalPickerHeight);
-  _languageSelectionView.reset(
-      [[UIView alloc] initWithFrame:languageSelectionViewFrame]);
+  _languageSelectionView =
+      [[UIView alloc] initWithFrame:languageSelectionViewFrame];
   [_languageSelectionView
       setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
                           UIViewAutoresizingFlexibleTopMargin];
@@ -291,21 +293,20 @@
   CGRect initialNavigationBarFrame = finalNavigationBarFrame;
   initialNavigationBarFrame.origin.y += totalPickerHeight;
 
-  _navigationBar.reset(
-      [[UINavigationBar alloc] initWithFrame:initialNavigationBarFrame]);
+  _navigationBar =
+      [[UINavigationBar alloc] initWithFrame:initialNavigationBarFrame];
   const UIViewAutoresizing resizingMask =
       UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
   [_navigationBar setAutoresizingMask:resizingMask];
-  base::scoped_nsobject<UIBarButtonItem> doneButton([[UIBarButtonItem alloc]
+  UIBarButtonItem* doneButton = [[UIBarButtonItem alloc]
       initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                            target:self
-                           action:@selector(languageSelectionDone)]);
-  base::scoped_nsobject<UIBarButtonItem> cancelButton([[UIBarButtonItem alloc]
+                           action:@selector(languageSelectionDone)];
+  UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc]
       initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                            target:self
-                           action:@selector(dismissLanguageSelectionView)]);
-  base::scoped_nsobject<UINavigationItem> item(
-      [[UINavigationItem alloc] initWithTitle:@""]);
+                           action:@selector(dismissLanguageSelectionView)];
+  UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@""];
   [item setRightBarButtonItem:doneButton];
   [item setLeftBarButtonItem:cancelButton];
   [item setHidesBackButton:YES];
@@ -338,12 +339,11 @@
     selectedRow = targetLanguageIndex;
     disabledRow = originalLanguageIndex;
   }
-  _languagePickerController.reset([[LanguagePickerController alloc]
+  _languagePickerController = [[LanguagePickerController alloc]
       initWithDelegate:_translateInfoBarDelegate
             initialRow:selectedRow
-           disabledRow:disabledRow]);
-  _languagePicker.reset(
-      [[UIPickerView alloc] initWithFrame:initialPickerFrame]);
+           disabledRow:disabledRow];
+  _languagePicker = [[UIPickerView alloc] initWithFrame:initialPickerFrame];
   [_languagePicker setAutoresizingMask:resizingMask];
   [_languagePicker setShowsSelectionIndicator:YES];
   [_languagePicker setDataSource:_languagePickerController];
@@ -352,12 +352,12 @@
   [_languagePicker setBackgroundColor:[self.view backgroundColor]];
   [_languagePicker selectRow:selectedRow inComponent:0 animated:NO];
 
-  auto blockLanguagePicker(_languagePicker);
-  auto blockNavigationBar(_navigationBar);
+  UIPickerView* blockLanguagePicker = _languagePicker;
+  UINavigationBar* blockNavigationBar = _navigationBar;
   [UIView animateWithDuration:kPickerAnimationDurationInSeconds
                    animations:^{
-                     blockLanguagePicker.get().frame = finalPickerFrame;
-                     blockNavigationBar.get().frame = finalNavigationBarFrame;
+                     blockLanguagePicker.frame = finalPickerFrame;
+                     blockNavigationBar.frame = finalNavigationBarFrame;
                    }];
 
   // Add the subviews.
diff --git a/ios/chrome/browser/translate/chrome_ios_translate_client.mm b/ios/chrome/browser/translate/chrome_ios_translate_client.mm
index 623ad385..d6b5641 100644
--- a/ios/chrome/browser/translate/chrome_ios_translate_client.mm
+++ b/ios/chrome/browser/translate/chrome_ios_translate_client.mm
@@ -37,6 +37,10 @@
 #include "ios/web/public/web_state/web_state.h"
 #include "url/gurl.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 DEFINE_WEB_STATE_USER_DATA_KEY(ChromeIOSTranslateClient);
 
 ChromeIOSTranslateClient::ChromeIOSTranslateClient(web::WebState* web_state)
@@ -75,24 +79,24 @@
   translate::TranslateStep step = delegate->translate_step();
 
   std::unique_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate)));
-  base::scoped_nsobject<InfoBarController> controller;
+  InfoBarController* controller;
   switch (step) {
     case translate::TRANSLATE_STEP_AFTER_TRANSLATE:
-      controller.reset([[AfterTranslateInfoBarController alloc]
-          initWithDelegate:infobar.get()]);
+      controller = [[AfterTranslateInfoBarController alloc]
+          initWithDelegate:infobar.get()];
       break;
     case translate::TRANSLATE_STEP_BEFORE_TRANSLATE:
-      controller.reset([[BeforeTranslateInfoBarController alloc]
-          initWithDelegate:infobar.get()]);
+      controller = [[BeforeTranslateInfoBarController alloc]
+          initWithDelegate:infobar.get()];
       break;
     case translate::TRANSLATE_STEP_NEVER_TRANSLATE:
-      controller.reset([[NeverTranslateInfoBarController alloc]
-          initWithDelegate:infobar.get()]);
+      controller = [[NeverTranslateInfoBarController alloc]
+          initWithDelegate:infobar.get()];
       break;
     case translate::TRANSLATE_STEP_TRANSLATING:
     case translate::TRANSLATE_STEP_TRANSLATE_ERROR:
-      controller.reset([[TranslateMessageInfoBarController alloc]
-          initWithDelegate:infobar.get()]);
+      controller = [[TranslateMessageInfoBarController alloc]
+          initWithDelegate:infobar.get()];
       break;
     default:
       NOTREACHED();
diff --git a/ios/chrome/browser/translate/never_translate_infobar_controller.mm b/ios/chrome/browser/translate/never_translate_infobar_controller.mm
index 408da65..a88d8c7 100644
--- a/ios/chrome/browser/translate/never_translate_infobar_controller.mm
+++ b/ios/chrome/browser/translate/never_translate_infobar_controller.mm
@@ -4,7 +4,6 @@
 
 #include "ios/chrome/browser/translate/never_translate_infobar_controller.h"
 
-#include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
@@ -16,6 +15,10 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/image/image.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 @interface NeverTranslateInfoBarController ()
 
 // Action for any of the user defined buttons.
@@ -30,11 +33,11 @@
 
 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate
                           frame:(CGRect)frame {
-  base::scoped_nsobject<InfoBarView> infoBarView;
+  InfoBarView* infoBarView;
   translate::TranslateInfoBarDelegate* translateInfoBarDelegate =
       delegate->AsTranslateInfoBarDelegate();
-  infoBarView.reset(
-      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]);
+  infoBarView =
+      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate];
   // Icon
   gfx::Image icon = translateInfoBarDelegate->GetIcon();
   if (!icon.IsEmpty())
@@ -60,7 +63,7 @@
                      tag2:TranslateInfoBarIOSTag::DENY_WEBSITE
                    target:self
                    action:@selector(infoBarButtonDidPress:)];
-  return [[infoBarView retain] autorelease];
+  return infoBarView;
 }
 
 #pragma mark - Handling of User Events
diff --git a/ios/chrome/browser/translate/translate_message_infobar_controller.mm b/ios/chrome/browser/translate/translate_message_infobar_controller.mm
index 5af8763b..fea850a9 100644
--- a/ios/chrome/browser/translate/translate_message_infobar_controller.mm
+++ b/ios/chrome/browser/translate/translate_message_infobar_controller.mm
@@ -4,7 +4,6 @@
 
 #include "ios/chrome/browser/translate/translate_message_infobar_controller.h"
 
-#include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/translate/core/browser/translate_infobar_delegate.h"
 #include "ios/chrome/browser/translate/translate_infobar_tags.h"
@@ -12,6 +11,10 @@
 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h"
 #include "ui/gfx/image/image.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 @interface TranslateMessageInfoBarController ()
 
 // Action for any of the user defined buttons.
@@ -23,11 +26,11 @@
 
 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate
                           frame:(CGRect)frame {
-  base::scoped_nsobject<InfoBarView> infoBarView;
+  InfoBarView* infoBarView;
   translate::TranslateInfoBarDelegate* translateInfoBarDelegate =
       delegate->AsTranslateInfoBarDelegate();
-  infoBarView.reset(
-      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]);
+  infoBarView =
+      [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate];
   // Icon
   gfx::Image icon = translateInfoBarDelegate->GetIcon();
   if (!icon.IsEmpty())
@@ -48,7 +51,7 @@
                     target:self
                     action:@selector(infoBarButtonDidPress:)];
   }
-  return [[infoBarView retain] autorelease];
+  return infoBarView;
 }
 
 #pragma mark - Handling of User Events
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
index 59e4060..cacd6a1c 100644
--- a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
@@ -79,7 +79,9 @@
 @implementation SignedInAccountsCollectionViewController
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
-  self = [super initWithStyle:CollectionViewControllerStyleDefault];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleDefault];
   if (self) {
     _browserState = browserState;
     _avatarCache = [[ResizedAvatarCache alloc] init];
diff --git a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h
index 240ce9df..5da4f4e 100644
--- a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h
+++ b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h
@@ -26,7 +26,8 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @property(nonatomic, weak) id<SigninAccountSelectorViewControllerDelegate>
diff --git a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm
index 1106c12..2a6fc37 100644
--- a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm
@@ -60,7 +60,9 @@
 @synthesize delegate = _delegate;
 
 - (instancetype)init {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _identityServiceObserver.reset(
         new ChromeIdentityServiceObserverBridge(self));
diff --git a/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.h b/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.h
index b7768ee..0d39c1d 100644
--- a/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.h
+++ b/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.h
@@ -31,7 +31,8 @@
 - (instancetype)initWithIdentity:(ChromeIdentity*)identity
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Scrolls the confirmation view to the bottom of its content.
diff --git a/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm b/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm
index d516567..a81b239 100644
--- a/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm
@@ -91,7 +91,9 @@
 @synthesize delegate;
 
 - (instancetype)initWithIdentity:(ChromeIdentity*)identity {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _identity = identity;
     _identityServiceObserver.reset(
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
index 7bf9c69..8393ebb 100644
--- a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
+++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
@@ -58,7 +58,8 @@
 // Designated initializer. |bridge| must not be null.
 - (instancetype)initWithBridge:(autofill::CardUnmaskPromptViewBridge*)bridge
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Shows the form that allows the user to input their CVC.
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
index 0f29070b..89ca46d 100644
--- a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
@@ -144,8 +144,10 @@
 @implementation CardUnmaskPromptViewController
 
 - (instancetype)initWithBridge:(autofill::CardUnmaskPromptViewBridge*)bridge {
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
   DCHECK(bridge);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _bridge = bridge;
   }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h
index 081260af..56fd7df 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h
@@ -51,7 +51,8 @@
 - (instancetype)initWithBookmark:(const bookmarks::BookmarkNode*)bookmark
                     browserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Closes the edit view as if close button was pressed.
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
index f742137f..03b5ac46b 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
@@ -166,7 +166,9 @@
                     browserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(bookmark);
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     DCHECK(!bookmark->is_folder());
     DCHECK(!browserState->IsOffTheRecord());
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.h
index 737f1b1..8b621df6e 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.h
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.h
@@ -59,6 +59,10 @@
                        folder:(const bookmarks::BookmarkNode*)folder
                  browserState:(ios::ChromeBrowserState*)browserState;
 
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
+    NS_UNAVAILABLE;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_FOLDER_EDITOR_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
index 19eb7573..4f37d61 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
@@ -78,8 +78,6 @@
 // |bookmarkModel| must not be NULL and must be loaded.
 - (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
-    NS_UNAVAILABLE;
 
 // Enables or disables the save button depending on the state of the form.
 - (void)updateSaveButtonState;
@@ -143,7 +141,9 @@
 - (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel {
   DCHECK(bookmarkModel);
   DCHECK(bookmarkModel->loaded());
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _bookmarkModel = bookmarkModel;
 
@@ -154,11 +154,6 @@
   return self;
 }
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  NOTREACHED();
-  return nil;
-}
-
 - (void)dealloc {
   _titleItem.delegate = nil;
   _folderViewController.delegate = nil;
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index f0da350..955677b 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -4457,6 +4457,8 @@
         [[ContentSuggestionsCoordinator alloc] initWithBaseViewController:self];
     [_contentSuggestionsCoordinator setURLLoader:self];
   }
+  _contentSuggestionsCoordinator.dispatcher = _dispatcher;
+  _contentSuggestionsCoordinator.webStateList = [_model webStateList];
   [_contentSuggestionsCoordinator setBrowserState:_browserState];
   [_contentSuggestionsCoordinator start];
 }
diff --git a/ios/chrome/browser/ui/collection_view/collection_view_controller.h b/ios/chrome/browser/ui/collection_view/collection_view_controller.h
index a8b8ec4..9cb5e65 100644
--- a/ios/chrome/browser/ui/collection_view/collection_view_controller.h
+++ b/ios/chrome/browser/ui/collection_view/collection_view_controller.h
@@ -28,8 +28,9 @@
 @property(strong, nonatomic, readonly)
     CollectionViewModel<CollectionViewItem*>* collectionViewModel;
 
-// Initializer with the desired style.
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+// Initializer with the desired style and layout.
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout*)layout
     NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/collection_view/collection_view_controller.mm b/ios/chrome/browser/ui/collection_view/collection_view_controller.mm
index 468831465..6fbd88f 100644
--- a/ios/chrome/browser/ui/collection_view/collection_view_controller.mm
+++ b/ios/chrome/browser/ui/collection_view/collection_view_controller.mm
@@ -22,8 +22,8 @@
 @synthesize appBar = _appBar;
 @synthesize collectionViewModel = _collectionViewModel;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style {
   self = [super initWithCollectionViewLayout:layout];
   if (self) {
     if (style == CollectionViewControllerStyleAppBar) {
diff --git a/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm b/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
index ef989a57..37c170e 100644
--- a/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
@@ -51,7 +51,8 @@
   void TestReconfigureBlock(ReconfigureBlock block) {
     // Setup.
     CollectionViewController* controller = [[CollectionViewController alloc]
-        initWithStyle:CollectionViewControllerStyleDefault];
+        initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+                 style:CollectionViewControllerStyleDefault];
     [controller loadModel];
 
     CollectionViewModel* model = [controller collectionViewModel];
@@ -114,19 +115,22 @@
 
 TEST_F(CollectionViewControllerTest, InitDefaultStyle) {
   CollectionViewController* controller = [[CollectionViewController alloc]
-      initWithStyle:CollectionViewControllerStyleDefault];
+      initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+               style:CollectionViewControllerStyleDefault];
   EXPECT_EQ(nil, controller.appBar);
 }
 
 TEST_F(CollectionViewControllerTest, InitAppBarStyle) {
   CollectionViewController* controller = [[CollectionViewController alloc]
-      initWithStyle:CollectionViewControllerStyleAppBar];
+      initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+               style:CollectionViewControllerStyleAppBar];
   EXPECT_NE(nil, controller.appBar);
 }
 
 TEST_F(CollectionViewControllerTest, CellForItemAtIndexPath) {
   CollectionViewController* controller = [[CollectionViewController alloc]
-      initWithStyle:CollectionViewControllerStyleDefault];
+      initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+               style:CollectionViewControllerStyleDefault];
   [controller loadModel];
 
   [[controller collectionViewModel]
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
index 19ef703..9adf2d5 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
@@ -533,7 +533,7 @@
           headerForSectionWithIdentifier:SectionIdentifierLogo]) {
     ContentSuggestionsHeaderItem* header =
         [[ContentSuggestionsHeaderItem alloc] initWithType:ItemTypeHeader];
-    header.view = self.dataSource.headerView;
+    header.view = [self.dataSource headerViewForWidth:self.collectionWidth];
     [self.collectionViewController.collectionViewModel
                        setHeader:header
         forSectionWithIdentifier:SectionIdentifierLogo];
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h
index 1c3fe93..fb79ddb 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h
@@ -68,7 +68,7 @@
     (nonnull ContentSuggestionIdentifier*)suggestionIdentifier;
 
 // Returns the header view containing the logo and omnibox to be displayed.
-- (nullable UIView*)headerView;
+- (nullable UIView*)headerViewForWidth:(CGFloat)width;
 
 @end
 
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
index 88d7457..c8efaea 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
@@ -21,7 +21,8 @@
                    dataSource:(id<ContentSuggestionsDataSource>)dataSource
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Handler for the commands sent by the ContentSuggestionsViewController.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
index b2ffbf4..86a4ca92 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -50,7 +50,8 @@
 
 - (instancetype)initWithStyle:(CollectionViewControllerStyle)style
                    dataSource:(id<ContentSuggestionsDataSource>)dataSource {
-  self = [super initWithStyle:style];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self = [super initWithLayout:layout style:style];
   if (self) {
     _collectionUpdater = [[ContentSuggestionsCollectionUpdater alloc]
         initWithDataSource:dataSource];
diff --git a/ios/chrome/browser/ui/history/history_collection_view_controller.h b/ios/chrome/browser/ui/history/history_collection_view_controller.h
index bb1f5be..e24e442 100644
--- a/ios/chrome/browser/ui/history/history_collection_view_controller.h
+++ b/ios/chrome/browser/ui/history/history_collection_view_controller.h
@@ -51,7 +51,8 @@
                       delegate:
                           (id<HistoryCollectionViewControllerDelegate>)delegate
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Search history for text |query| and display the results. |query| may be nil.
diff --git a/ios/chrome/browser/ui/history/history_collection_view_controller.mm b/ios/chrome/browser/ui/history/history_collection_view_controller.mm
index 775212f..9d5f9ebd 100644
--- a/ios/chrome/browser/ui/history/history_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/history/history_collection_view_controller.mm
@@ -147,7 +147,9 @@
                   browserState:(ios::ChromeBrowserState*)browserState
                       delegate:(id<HistoryCollectionViewControllerDelegate>)
                                    delegate {
-  self = [super initWithStyle:CollectionViewControllerStyleDefault];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleDefault];
   if (self) {
     _historyServiceFacade.reset(new HistoryServiceFacade(browserState, self));
     _browserState = browserState;
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn
index 6a184ca3..f045030 100644
--- a/ios/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -138,6 +138,7 @@
 }
 
 source_set("ntp_controller") {
+  configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
     "new_tab_page_controller.h",
     "new_tab_page_controller.mm",
diff --git a/ios/chrome/browser/ui/ntp/google_landing_data_source.h b/ios/chrome/browser/ui/ntp/google_landing_data_source.h
index 1ef2068..4e5d104 100644
--- a/ios/chrome/browser/ui/ntp/google_landing_data_source.h
+++ b/ios/chrome/browser/ui/ntp/google_landing_data_source.h
@@ -6,6 +6,7 @@
 #define IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_DATA_SOURCE_H_
 
 #import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 #include "components/ntp_tiles/ntp_tile.h"
 #include "components/ntp_tiles/tile_visual_type.h"
@@ -58,6 +59,15 @@
 // Gets the large icon service.
 - (favicon::LargeIconService*)largeIconService;
 
+// Asynchronously gets the favicon for |URL| with size |size| and calls
+// imageCallback if the favicon is valid or fallbackCallback if there is valid
+// fallback data.
+- (void)getFaviconForURL:(GURL)URL
+                    size:(CGFloat)size
+                useCache:(BOOL)useCache
+           imageCallback:(void (^)(UIImage*))imageCallback
+        fallbackCallback:(void (^)(UIColor*, UIColor*, BOOL))fallbackCallback;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_NTP_GOOGLE_LANDING_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm
index 0cebfb3..7cb2d54 100644
--- a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm
+++ b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm
@@ -5,10 +5,14 @@
 #import "ios/chrome/browser/ui/ntp/google_landing_mediator.h"
 
 #import "base/ios/weak_nsobject.h"
+#include "base/mac/bind_objc_block.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/cancelable_task_tracker.h"
+#include "components/favicon/core/large_icon_service.h"
+#include "components/favicon_base/fallback_icon_style.h"
 #include "components/ntp_tiles/metrics.h"
 #include "components/ntp_tiles/most_visited_sites.h"
 #include "components/ntp_tiles/ntp_tile.h"
@@ -19,6 +23,7 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h"
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
+#include "ios/chrome/browser/favicon/large_icon_cache.h"
 #import "ios/chrome/browser/metrics/new_tab_page_uma.h"
 #include "ios/chrome/browser/ntp_tiles/ios_most_visited_sites_factory.h"
 #import "ios/chrome/browser/ntp_tiles/most_visited_sites_observer_bridge.h"
@@ -37,11 +42,13 @@
 #include "ios/public/provider/chrome/browser/voice/voice_search_provider.h"
 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
 #include "ios/web/public/web_state/web_state.h"
+#include "skia/ext/skia_utils_ios.h"
 
 using base::UserMetricsAction;
 
 namespace {
 
+const CGFloat kFaviconMinSize = 32;
 const NSInteger kMaxNumMostVisitedFavicons = 8;
 
 }  // namespace
@@ -115,6 +122,9 @@
 
   // What's new promo.
   std::unique_ptr<NotificationPromoWhatsNew> _notification_promo;
+
+  // Used to cancel tasks for the LargeIconService.
+  base::CancelableTaskTracker _cancelable_task_tracker;
 }
 
 // Consumer to handle google landing update notifications.
@@ -279,6 +289,54 @@
   }
 }
 
+- (void)getFaviconForURL:(GURL)URL
+                    size:(CGFloat)size
+                useCache:(BOOL)useCache
+           imageCallback:(void (^)(UIImage*))imageCallback
+        fallbackCallback:(void (^)(UIColor*, UIColor*, BOOL))fallbackCallback {
+  base::WeakNSObject<GoogleLandingMediator> weakSelf(self);
+
+  void (^faviconBlock)(const favicon_base::LargeIconResult&) = ^(
+      const favicon_base::LargeIconResult& result) {
+    if (result.bitmap.is_valid()) {
+      scoped_refptr<base::RefCountedMemory> data =
+          result.bitmap.bitmap_data.get();
+      UIImage* favicon = [UIImage
+          imageWithData:[NSData dataWithBytes:data->front() length:data->size()]
+                  scale:[UIScreen mainScreen].scale];
+      imageCallback(favicon);
+    } else if (result.fallback_icon_style) {
+      UIColor* backgroundColor = skia::UIColorFromSkColor(
+          result.fallback_icon_style->background_color);
+      UIColor* textColor =
+          skia::UIColorFromSkColor(result.fallback_icon_style->text_color);
+      BOOL isDefaultColor =
+          result.fallback_icon_style->is_default_background_color;
+      fallbackCallback(backgroundColor, textColor, isDefaultColor);
+    }
+
+    base::scoped_nsobject<GoogleLandingMediator> strongSelf([weakSelf retain]);
+    if (strongSelf &&
+        (result.bitmap.is_valid() || result.fallback_icon_style)) {
+      [strongSelf largeIconCache]->SetCachedResult(URL, result);
+    }
+  };
+
+  if (useCache) {
+    std::unique_ptr<favicon_base::LargeIconResult> cached_result =
+        [self largeIconCache]->GetCachedResult(URL);
+    if (cached_result) {
+      faviconBlock(*cached_result);
+    }
+  }
+
+  CGFloat faviconSize = [UIScreen mainScreen].scale * size;
+  CGFloat faviconMinSize = [UIScreen mainScreen].scale * kFaviconMinSize;
+  [self largeIconService]->GetLargeIconOrFallbackStyle(
+      URL, faviconMinSize, faviconSize, base::BindBlock(faviconBlock),
+      &_cancelable_task_tracker);
+}
+
 #pragma mark - WebStateListObserving
 
 - (void)webStateList:(WebStateList*)webStateList
diff --git a/ios/chrome/browser/ui/ntp/google_landing_view_controller.mm b/ios/chrome/browser/ui/ntp/google_landing_view_controller.mm
index 5157527d..e5dfdab 100644
--- a/ios/chrome/browser/ui/ntp/google_landing_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/google_landing_view_controller.mm
@@ -815,8 +815,9 @@
       if (!IsIPadIdiom()) {
         // iPhone header also contains a toolbar since the normal toolbar is
         // hidden.
-        [_headerView addToolbarWithDataSource:self.dataSource
-                                   dispatcher:self.dispatcher];
+        [_headerView
+            addToolbarWithReadingListModel:[self.dataSource readingListModel]
+                                dispatcher:self.dispatcher];
         [_headerView setToolbarTabCount:self.tabCount];
         [_headerView setCanGoForward:self.canGoForward];
         [_headerView setCanGoBack:self.canGoBack];
diff --git a/ios/chrome/browser/ui/ntp/most_visited_cell.mm b/ios/chrome/browser/ui/ntp/most_visited_cell.mm
index c4bde11..3f2dabd4 100644
--- a/ios/chrome/browser/ui/ntp/most_visited_cell.mm
+++ b/ios/chrome/browser/ui/ntp/most_visited_cell.mm
@@ -11,26 +11,13 @@
 #import "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/sys_string_conversions.h"
-#include "base/task/cancelable_task_tracker.h"
 #include "components/favicon/core/fallback_url_util.h"
-#include "components/favicon/core/large_icon_service.h"
-#include "components/favicon_base/fallback_icon_style.h"
-#include "components/favicon_base/favicon_types.h"
-#include "components/history/core/browser/top_sites.h"
-#include "components/suggestions/suggestions_service.h"
-#import "ios/chrome/browser/favicon/favicon_loader.h"
-#include "ios/chrome/browser/favicon/favicon_service_factory.h"
-#include "ios/chrome/browser/favicon/large_icon_cache.h"
-#include "ios/chrome/browser/history/top_sites_factory.h"
-#include "ios/chrome/browser/suggestions/suggestions_service_factory.h"
 #import "ios/chrome/browser/ui/ntp/google_landing_data_source.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
-#include "skia/ext/skia_utils_ios.h"
 
 const CGFloat kFaviconSize = 48;
-const CGFloat kFaviconMinSize = 32;
 const CGFloat kImageViewBackgroundColor = 0.941;
 const CGFloat kImageViewCornerRadius = 3;
 const NSInteger kLabelNumLines = 2;
@@ -49,8 +36,6 @@
   base::scoped_nsobject<UILabel> _label;
   base::scoped_nsobject<UILabel> _noIconLabel;
   base::scoped_nsobject<UIImageView> _imageView;
-  // Used to cancel tasks for the LargeIconService.
-  base::CancelableTaskTracker _cancelable_task_tracker;
 }
 // Set the background color and center the first letter of the site title (or
 // domain if the title is a url).
@@ -152,56 +137,25 @@
   [self setURL:URL];
   base::WeakNSObject<MostVisitedCell> weakSelf(self);
 
-  void (^faviconBlock)(const favicon_base::LargeIconResult&) =
-      ^(const favicon_base::LargeIconResult& result) {
-        base::scoped_nsobject<MostVisitedCell> strongSelf([weakSelf retain]);
-        if (!strongSelf)
-          return;
+  void (^faviconImageBlock)(UIImage*) = ^(UIImage* favicon) {
 
-        if (URL == [strongSelf URL]) {  // Tile has not been reused.
-          if (result.bitmap.is_valid()) {
-            scoped_refptr<base::RefCountedMemory> data =
-                result.bitmap.bitmap_data.get();
-            UIImage* favicon =
-                [UIImage imageWithData:[NSData dataWithBytes:data->front()
-                                                      length:data->size()]
-                                 scale:[UIScreen mainScreen].scale];
-            [strongSelf setImage:favicon];
-          } else if (result.fallback_icon_style) {
-            UIColor* backgroundColor = skia::UIColorFromSkColor(
-                result.fallback_icon_style->background_color);
-            UIColor* textColor = skia::UIColorFromSkColor(
-                result.fallback_icon_style->text_color);
-            [strongSelf updateIconLabelWithColor:textColor
-                                 backgroundColor:backgroundColor
-                        isDefaultBackgroundColor:result.fallback_icon_style->
-                                                 is_default_background_color];
-          }
-        }
+    if (URL == [weakSelf URL])  // Tile has not been reused.
+      [weakSelf setImage:favicon];
+  };
 
-        if (result.bitmap.is_valid() || result.fallback_icon_style) {
-          LargeIconCache* largeIconCache =
-              [strongSelf.get()->_dataSource largeIconCache];
-          if (largeIconCache)
-            largeIconCache->SetCachedResult(URL, result);
-        }
+  void (^faviconFallbackBlock)(UIColor*, UIColor*, BOOL) =
+      ^(UIColor* textColor, UIColor* backgroundColor, BOOL isDefaultColor) {
+        if (URL == [weakSelf URL])  // Tile has not been reused.
+          [weakSelf updateIconLabelWithColor:textColor
+                             backgroundColor:backgroundColor
+                    isDefaultBackgroundColor:isDefaultColor];
       };
 
-  LargeIconCache* cache = [_dataSource largeIconCache];
-  std::unique_ptr<favicon_base::LargeIconResult> cached_result =
-      cache->GetCachedResult(URL);
-  if (cached_result) {
-    faviconBlock(*cached_result);
-  }
-
-  // Always call LargeIconService in case the favicon was updated.
-  favicon::LargeIconService* large_icon_service =
-      [_dataSource largeIconService];
-  CGFloat faviconSize = [UIScreen mainScreen].scale * kFaviconSize;
-  CGFloat faviconMinSize = [UIScreen mainScreen].scale * kFaviconMinSize;
-  large_icon_service->GetLargeIconOrFallbackStyle(
-      URL, faviconMinSize, faviconSize, base::BindBlock(faviconBlock),
-      &_cancelable_task_tracker);
+  [_dataSource getFaviconForURL:URL
+                           size:kFaviconSize
+                       useCache:YES
+                  imageCallback:faviconImageBlock
+               fallbackCallback:faviconFallbackBlock];
 }
 
 - (void)removePlaceholderImage {
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_controller.h
index b4bc70c..92f18a11 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_controller.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller.h
@@ -8,7 +8,6 @@
 #import <UIKit/UIKit.h>
 #include <string>
 
-#include "base/mac/scoped_nsobject.h"
 #import "ios/chrome/browser/ui/native_content_controller.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_bar.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_panel_protocol.h"
@@ -55,15 +54,15 @@
 // A controller for the New Tab Page user interface. Supports multiple "panels",
 // each with its own controller. The panels are created lazily.
 //
-// The scoped_nsobjects instance variables |*Controller_| are instances of
+// The strongly retained instance variables |*Controller_| are instances of
 // subclasses of NewTabPagePanelProtocol that are created lazily.
 // Each Panel is its own controller with the accessible views are added to the
-// |newTabPageView_|.
+// |ntpView_|.
 //
-// newTabPageView_ (aka |ntpView|) is a horizontally scrollable view that
-// contains the *PanelController instances available to the user at the moment.
-// A tab-page bar inside |ntpView| provides direct access to the
-// *PanelControllers on the scrollable view.
+// newTabPageView_ is a horizontally scrollable view that contains the
+// *PanelController instances available to the user at the moment. A tab-page
+// bar inside |ntpView| provides direct access to the *PanelControllers on the
+// scrollable view.
 //
 // The currently visible *PanelController is accessible through
 // |currentController_|.
@@ -74,16 +73,9 @@
                               NewTabPagePanelControllerDelegate,
                               ToolbarOwner,
                               UIGestureRecognizerDelegate,
-                              UIScrollViewDelegate> {
- @private
-  base::scoped_nsobject<BookmarkHomeTabletNTPController> bookmarkController_;
-  base::scoped_nsobject<GoogleLandingViewController> googleLandingController_;
-  base::scoped_nsprotocol<id<NewTabPagePanelProtocol>> incognitoController_;
-  // The currently visible controller, one of the above.
-  id<NewTabPagePanelProtocol> currentController_;  // weak
-}
+                              UIScrollViewDelegate>
 
-@property(nonatomic, assign) id<CRWSwipeRecognizerProvider>
+@property(nonatomic, weak) id<CRWSwipeRecognizerProvider>
     swipeRecognizerProvider;
 
 // Init with the given url (presumably "chrome://newtab") and loader object.
@@ -114,4 +106,17 @@
 
 @end
 
+#pragma mark - Testing
+
+@class NewTabPageView;
+
+@interface NewTabPageController (TestSupport)
+@property(nonatomic, strong) NewTabPageView* ntpView;
+
+- (id<NewTabPagePanelProtocol>)currentController;
+- (BookmarkHomeTabletNTPController*)bookmarkController;
+- (GoogleLandingViewController*)googleLandingController;
+- (id<NewTabPagePanelProtocol>)incognitoController;
+@end
+
 #endif  // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm
index 60b9af7..a84eeed 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm
@@ -6,9 +6,8 @@
 
 #import <QuartzCore/QuartzCore.h>
 
-#import "base/ios/weak_nsobject.h"
 #include "base/logging.h"
-#include "base/mac/objc_property_releaser.h"
+
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "components/prefs/pref_service.h"
@@ -40,6 +39,10 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 using base::UserMetricsAction;
 
 namespace {
@@ -108,31 +111,31 @@
 }  // anonymous namespace
 
 @interface NewTabPageController () {
-  ios::ChromeBrowserState* browserState_;                   // Weak.
-  id<UrlLoader> loader_;                                    // Weak.
-  id<CRWSwipeRecognizerProvider> swipeRecognizerProvider_;  // Weak.
-  id<NewTabPageControllerObserver> newTabPageObserver_;     // Weak.
+  ios::ChromeBrowserState* browserState_;  // weak.
+  __weak id<UrlLoader> loader_;
+  __weak id<NewTabPageControllerObserver> newTabPageObserver_;
+  BookmarkHomeTabletNTPController* bookmarkController_;
+  GoogleLandingViewController* googleLandingController_;
+  id<NewTabPagePanelProtocol> incognitoController_;
+  // The currently visible controller, one of the above.
+  __weak id<NewTabPagePanelProtocol> currentController_;
 
-  NewTabPageView* newTabPageView_;
+  GoogleLandingMediator* googleLandingMediator_;
 
-  base::scoped_nsobject<GoogleLandingMediator> googleLandingMediator_;
-
-  base::scoped_nsobject<RecentTabsPanelController> openTabsController_;
+  RecentTabsPanelController* openTabsController_;
   // Has the scrollView been initialized.
   BOOL scrollInitialized_;
 
   // Dominant color cache. Key: (NSString*)url, val: (UIColor*)dominantColor.
-  NSMutableDictionary* dominantColorCache_;  // Weak, owned by bvc.
+  __weak NSMutableDictionary* dominantColorCache_;  // Owned by bvc.
 
   // Delegate to focus and blur the omnibox.
-  base::WeakNSProtocol<id<OmniboxFocuser>> focuser_;
+  __weak id<OmniboxFocuser> focuser_;
 
   // Delegate to fetch the ToolbarModel and current web state from.
-  base::WeakNSProtocol<id<WebToolbarDelegate>> webToolbarDelegate_;
+  __weak id<WebToolbarDelegate> webToolbarDelegate_;
 
-  base::scoped_nsobject<TabModel> tabModel_;
-
-  base::mac::ObjCPropertyReleaser propertyReleaser_NewTabPageController_;
+  TabModel* tabModel_;
 }
 
 // Load and bring panel into view.
@@ -161,7 +164,7 @@
 // Returns the ID for the currently selected panel.
 - (NewTabPage::PanelIdentifier)selectedPanelID;
 
-@property(nonatomic, retain) NewTabPageView* ntpView;
+@property(nonatomic, strong) NewTabPageView* ntpView;
 
 // To ease modernizing the NTP only the internal panels are being converted
 // to UIViewControllers.  This means all the plumbing between the
@@ -170,17 +173,17 @@
 // controller would be owned by a coordinator, in this case the old NTP
 // controller adds and removes child view controllers itself when a load
 // is initiated, and when WebController calls -willBeDismissed.
-@property(nonatomic, assign) UIViewController* parentViewController;
+@property(nonatomic, weak) UIViewController* parentViewController;
 
 // To ease modernizing the NTP a non-descript CommandDispatcher is passed thru
 // to be used by the reuabled NTP panels.
-@property(nonatomic, assign) id dispatcher;
+@property(nonatomic, weak) id dispatcher;
 
 @end
 
 @implementation NewTabPageController
 
-@synthesize ntpView = newTabPageView_;
+@synthesize ntpView = ntpView_;
 @synthesize swipeRecognizerProvider = swipeRecognizerProvider_;
 @synthesize parentViewController = parentViewController_;
 @synthesize dispatcher = dispatcher_;
@@ -198,32 +201,29 @@
   self = [super initWithNibName:nil url:url];
   if (self) {
     DCHECK(browserState);
-    propertyReleaser_NewTabPageController_.Init(self,
-                                                [NewTabPageController class]);
     browserState_ = browserState;
     loader_ = loader;
     newTabPageObserver_ = ntpObserver;
     parentViewController_ = parentViewController;
     dispatcher_ = dispatcher;
-    focuser_.reset(focuser);
-    webToolbarDelegate_.reset(webToolbarDelegate);
-    tabModel_.reset([tabModel retain]);
+    focuser_ = focuser;
+    webToolbarDelegate_ = webToolbarDelegate;
+    tabModel_ = tabModel;
     dominantColorCache_ = colorCache;
     self.title = l10n_util::GetNSString(IDS_NEW_TAB_TITLE);
     scrollInitialized_ = NO;
 
-    base::scoped_nsobject<UIScrollView> scrollView(
-        [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 412)]);
+    UIScrollView* scrollView =
+        [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 412)];
     [scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
                                      UIViewAutoresizingFlexibleHeight)];
-    base::scoped_nsobject<NewTabPageBar> tabBar(
-        [[NewTabPageBar alloc] initWithFrame:CGRectMake(0, 412, 320, 48)]);
-    newTabPageView_ =
-        [[NewTabPageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)
-                                andScrollView:scrollView
-                                    andTabBar:tabBar];
+    NewTabPageBar* tabBar =
+        [[NewTabPageBar alloc] initWithFrame:CGRectMake(0, 412, 320, 48)];
+    ntpView_ = [[NewTabPageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)
+                                       andScrollView:scrollView
+                                           andTabBar:tabBar];
     // TODO(crbug.com/607113): Merge view and ntpView.
-    self.view = newTabPageView_;
+    self.view = ntpView_;
     [tabBar setDelegate:self];
 
     bool isIncognito = browserState_->IsOffTheRecord();
@@ -317,7 +317,6 @@
   [bookmarkController_ setDelegate:nil];
   [openTabsController_ setDelegate:nil];
   [[NSNotificationCenter defaultCenter] removeObserver:self];
-  [super dealloc];
 }
 
 #pragma mark - CRWNativeContent
@@ -533,26 +532,25 @@
   // Only load the controllers once.
   if (item.identifier == NewTabPage::kBookmarksPanel) {
     if (!bookmarkController_) {
-      base::scoped_nsobject<BookmarkControllerFactory> factory(
-          [[BookmarkControllerFactory alloc] init]);
-      bookmarkController_.reset([[factory
-          bookmarkPanelControllerForBrowserState:browserState_
-                                          loader:loader_
-                                      colorCache:dominantColorCache_] retain]);
+      BookmarkControllerFactory* factory =
+          [[BookmarkControllerFactory alloc] init];
+      bookmarkController_ =
+          [factory bookmarkPanelControllerForBrowserState:browserState_
+                                                   loader:loader_
+                                               colorCache:dominantColorCache_];
     }
     panelController = bookmarkController_;
     view = [bookmarkController_ view];
     [bookmarkController_ setDelegate:self];
   } else if (item.identifier == NewTabPage::kMostVisitedPanel) {
     if (!googleLandingController_) {
-      googleLandingController_.reset(
-          [[GoogleLandingViewController alloc] init]);
+      googleLandingController_ = [[GoogleLandingViewController alloc] init];
       [googleLandingController_ setDispatcher:self.dispatcher];
-      googleLandingMediator_.reset([[GoogleLandingMediator alloc]
+      googleLandingMediator_ = [[GoogleLandingMediator alloc]
           initWithConsumer:googleLandingController_
               browserState:browserState_
                 dispatcher:self.dispatcher
-              webStateList:[tabModel_ webStateList]]);
+              webStateList:[tabModel_ webStateList]];
       [googleLandingController_ setDataSource:googleLandingMediator_];
     }
     panelController = googleLandingController_;
@@ -560,18 +558,18 @@
     [googleLandingController_ setDelegate:self];
   } else if (item.identifier == NewTabPage::kOpenTabsPanel) {
     if (!openTabsController_)
-      openTabsController_.reset([[RecentTabsPanelController alloc]
-          initWithLoader:loader_
-            browserState:browserState_]);
+      openTabsController_ =
+          [[RecentTabsPanelController alloc] initWithLoader:loader_
+                                               browserState:browserState_];
     // TODO(crbug.com/708319): Also set panelController for opentabs here.
     view = [openTabsController_ view];
     [openTabsController_ setDelegate:self];
   } else if (item.identifier == NewTabPage::kIncognitoPanel) {
     if (!incognitoController_)
-      incognitoController_.reset([[IncognitoPanelController alloc]
-              initWithLoader:loader_
-                browserState:browserState_
-          webToolbarDelegate:webToolbarDelegate_]);
+      incognitoController_ =
+          [[IncognitoPanelController alloc] initWithLoader:loader_
+                                              browserState:browserState_
+                                        webToolbarDelegate:webToolbarDelegate_];
     // TODO(crbug.com/708319): Also set panelController for incognito here.
     view = [incognitoController_ view];
   } else {
@@ -612,12 +610,12 @@
     [self.ntpView.scrollView setContentOffset:point animated:animate];
   } else {
     if (item.identifier == NewTabPage::kBookmarksPanel) {
-      base::scoped_nsobject<GenericChromeCommand> command(
-          [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BOOKMARK_MANAGER]);
+      GenericChromeCommand* command =
+          [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BOOKMARK_MANAGER];
       [self.ntpView chromeExecuteCommand:command];
     } else if (item.identifier == NewTabPage::kOpenTabsPanel) {
-      base::scoped_nsobject<GenericChromeCommand> command(
-          [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_OTHER_DEVICES]);
+      GenericChromeCommand* command =
+          [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_OTHER_DEVICES];
       [self.ntpView chromeExecuteCommand:command];
     }
   }
@@ -662,20 +660,20 @@
   id<NewTabPagePanelProtocol> oldController = currentController_;
   self.ntpView.tabBar.selectedIndex = index;
   if (item.identifier == NewTabPage::kBookmarksPanel)
-    currentController_ = bookmarkController_.get();
+    currentController_ = bookmarkController_;
   else if (item.identifier == NewTabPage::kMostVisitedPanel)
-    currentController_ = googleLandingController_.get();
+    currentController_ = googleLandingController_;
   else if (item.identifier == NewTabPage::kOpenTabsPanel)
-    currentController_ = openTabsController_.get();
+    currentController_ = openTabsController_;
   else if (item.identifier == NewTabPage::kIncognitoPanel)
-    currentController_ = incognitoController_.get();
+    currentController_ = incognitoController_;
 
   [bookmarkController_
-      setScrollsToTop:(currentController_ == bookmarkController_.get())];
+      setScrollsToTop:(currentController_ == bookmarkController_)];
   [googleLandingController_
-      setScrollsToTop:(currentController_ == googleLandingController_.get())];
+      setScrollsToTop:(currentController_ == googleLandingController_)];
   [openTabsController_
-      setScrollsToTop:(currentController_ == openTabsController_.get())];
+      setScrollsToTop:(currentController_ == openTabsController_)];
   [self.ntpView.tabBar
       setShadowAlpha:[currentController_ alphaForBottomShadow]];
 
@@ -747,3 +745,23 @@
 }
 
 @end
+
+@implementation NewTabPageController (TestSupport)
+
+- (id<NewTabPagePanelProtocol>)currentController {
+  return currentController_;
+}
+
+- (BookmarkHomeTabletNTPController*)bookmarkController {
+  return bookmarkController_;
+}
+
+- (GoogleLandingViewController*)googleLandingController {
+  return googleLandingController_;
+}
+
+- (id<NewTabPagePanelProtocol>)incognitoController {
+  return incognitoController_;
+}
+
+@end
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller_unittest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_controller_unittest.mm
index 2314916..717ab6b 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_controller_unittest.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller_unittest.mm
@@ -34,31 +34,6 @@
 #error "This file requires ARC support."
 #endif
 
-@interface NewTabPageController (TestSupport)
-- (id<NewTabPagePanelProtocol>)currentController;
-- (BookmarkHomeTabletNTPController*)bookmarkController;
-- (id<NewTabPagePanelProtocol>)incognitoController;
-@end
-
-@interface NewTabPageController (PrivateMethods)
-@property(nonatomic, retain) NewTabPageView* ntpView;
-@end
-
-@implementation NewTabPageController (TestSupport)
-
-- (id<NewTabPagePanelProtocol>)currentController {
-  return currentController_;
-}
-
-- (BookmarkHomeTabletNTPController*)bookmarkController {
-  return bookmarkController_.get();
-}
-
-- (id<NewTabPagePanelProtocol>)incognitoController {
-  return incognitoController_;
-}
-
-@end
 
 namespace {
 
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm
index 5076e4f..538d27b 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm
@@ -23,12 +23,6 @@
 #error "This file requires ARC support."
 #endif
 
-@implementation NewTabPageController (ExposedForTesting)
-- (GoogleLandingViewController*)googleLandingController {
-  return googleLandingController_;
-}
-@end
-
 @interface GoogleLandingViewController (ExposedForTesting)
 - (BOOL)scrolledToTop;
 - (BOOL)animateHeader;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.h b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.h
index 83911a7e..c8974821 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.h
@@ -9,7 +9,7 @@
 
 #import "ios/chrome/browser/ui/toolbar/toolbar_owner.h"
 
-@protocol GoogleLandingDataSource;
+class ReadingListModel;
 
 // Header view for the Material Design NTP. The header view contains all views
 // that are displayed above the list of most visited sites, which includes the
@@ -19,10 +19,10 @@
 // Return the toolbar view;
 @property(nonatomic, readonly) UIView* toolBarView;
 
-// Creates a NewTabPageToolbarController using the given |toolbarDelegate|,
-// |focuser| and |readingListModel|, and adds the toolbar view to self.
-- (void)addToolbarWithDataSource:(id<GoogleLandingDataSource>)dataSource
-                      dispatcher:(id)dispatcher;
+// Creates a NewTabPageToolbarController using the given |dispatcher|,
+// |readingListModel|, and adds the toolbar view to self.
+- (void)addToolbarWithReadingListModel:(ReadingListModel*)readingListModel
+                            dispatcher:(id)dispatcher;
 
 // Changes the constraints of searchField based on its initialFrame and the
 // scroll view's y |offset|. Also adjust the alpha values for |_searchBoxBorder|
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm
index 945cc38..0381854 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_header_view.mm
@@ -65,14 +65,14 @@
   [self addSubview:[_toolbarController view]];
 }
 
-- (void)addToolbarWithDataSource:(id<GoogleLandingDataSource>)dataSource
-                      dispatcher:(id)dispatcher {
+- (void)addToolbarWithReadingListModel:(ReadingListModel*)readingListModel
+                            dispatcher:(id)dispatcher {
   DCHECK(!_toolbarController);
-  DCHECK(dataSource);
+  DCHECK(readingListModel);
 
   _toolbarController = [[NewTabPageToolbarController alloc] init];
   [_toolbarController setDispatcher:dispatcher];
-  _toolbarController.readingListModel = [dataSource readingListModel];
+  _toolbarController.readingListModel = readingListModel;
 
   UIView* toolbarView = [_toolbarController view];
   CGRect toolbarFrame = self.bounds;
diff --git a/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
index b20a3790..0af0a36 100644
--- a/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
@@ -51,7 +51,8 @@
 
 - (instancetype)init NS_UNAVAILABLE;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
index af18494a..e354322 100644
--- a/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
@@ -56,7 +56,9 @@
 @synthesize dataSource = _dataSource;
 
 - (instancetype)initWithPayButtonEnabled:(BOOL)payButtonEnabled {
-  if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) {
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  if ((self = [super initWithLayout:layout
+                              style:CollectionViewControllerStyleAppBar])) {
     [self setTitle:l10n_util::GetNSString(IDS_PAYMENTS_ORDER_SUMMARY_LABEL)];
 
     // Set up leading (return) button.
diff --git a/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
index 6128089..5b5acb4 100644
--- a/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
@@ -158,7 +158,8 @@
 @synthesize pickerViews = _pickerViews;
 
 - (instancetype)init {
-  self = [self initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self = [self initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     // Set up leading (cancel) button.
     UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc]
@@ -191,8 +192,9 @@
   return self;
 }
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  self = [super initWithStyle:style];
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style {
+  self = [super initWithLayout:layout style:style];
   if (self) {
     _accessoryView = [[AutofillEditAccessoryView alloc] initWithDelegate:self];
     _options = [[NSMutableDictionary alloc] init];
diff --git a/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_unittest.mm
index b2c19ac..b215901 100644
--- a/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_unittest.mm
@@ -79,7 +79,8 @@
   CollectionViewController* InstantiateController() override {
     PaymentRequestEditViewController* viewController =
         [[PaymentRequestEditViewController alloc]
-            initWithStyle:CollectionViewControllerStyleDefault];
+            initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+                     style:CollectionViewControllerStyleDefault];
     mediator_ = [[TestPaymentRequestEditMediator alloc] init];
     [mediator_ setConsumer:viewController];
     [viewController setDataSource:mediator_];
diff --git a/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
index 3db67e5..2c9f97a 100644
--- a/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
@@ -34,7 +34,8 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
index db3357e..d186daa 100644
--- a/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
@@ -50,7 +50,9 @@
 @synthesize delegate = _delegate;
 
 - (instancetype)init {
-  if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) {
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  if ((self = [super initWithLayout:layout
+                              style:CollectionViewControllerStyleAppBar])) {
     [self setTitle:l10n_util::GetNSString(IDS_PAYMENTS_TITLE)];
 
     // Set up trailing (ok) button.
diff --git a/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
index 3157b06..aee0278 100644
--- a/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
@@ -57,7 +57,9 @@
 @synthesize editing = _editing;
 
 - (instancetype)init {
-  if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) {
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  if ((self = [super initWithLayout:layout
+                              style:CollectionViewControllerStyleAppBar])) {
     _editing = NO;
 
     // Set up leading (back) button.
diff --git a/ios/chrome/browser/ui/payments/payment_request_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_view_controller.h
index 9aae684..4de391df 100644
--- a/ios/chrome/browser/ui/payments/payment_request_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller.h
@@ -92,7 +92,8 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/payments/payment_request_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_view_controller.mm
index ba457c0..a44162d 100644
--- a/ios/chrome/browser/ui/payments/payment_request_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller.mm
@@ -82,7 +82,9 @@
 @synthesize dataSource = _dataSource;
 
 - (instancetype)init {
-  if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) {
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  if ((self = [super initWithLayout:layout
+                              style:CollectionViewControllerStyleAppBar])) {
     [self setTitle:l10n_util::GetNSString(IDS_PAYMENTS_TITLE)];
 
     // Set up leading (cancel) button.
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.h b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.h
index 4814b9a1..b6c270f 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.h
+++ b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.h
@@ -65,7 +65,8 @@
 - (instancetype)initWithDataSource:(id<ReadingListDataSource>)dataSource
                            toolbar:(ReadingListToolbar*)toolbar
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @property(nonatomic, weak) id<ReadingListCollectionViewControllerDelegate>
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.mm b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.mm
index bc4b7d1..b3b7145 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/reading_list/reading_list_collection_view_controller.mm
@@ -144,7 +144,9 @@
 
 - (instancetype)initWithDataSource:(id<ReadingListDataSource>)dataSource
                            toolbar:(ReadingListToolbar*)toolbar {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _toolbar = toolbar;
 
diff --git a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.h b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.h
index 00d74ea0..31c4f2b 100644
--- a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.h
@@ -14,7 +14,8 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm
index 740243f..40270c32 100644
--- a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm
@@ -51,7 +51,9 @@
 #pragma mark Initialization
 
 - (instancetype)init {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_ABOUT_PRODUCT_NAME);
     [self loadModel];
diff --git a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.h b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.h
index 4a0b9c1..f22449de 100644
--- a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.h
@@ -35,7 +35,8 @@
            closeSettingsOnAddAccount:(BOOL)closeSettingsOnAddAccount
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm
index ea44570f..54e7df65 100644
--- a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm
@@ -119,7 +119,9 @@
            closeSettingsOnAddAccount:(BOOL)closeSettingsOnAddAccount {
   DCHECK(browserState);
   DCHECK(!browserState->IsOffTheRecord());
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _browserState = browserState;
     _closeSettingsOnAddAccount = closeSettingsOnAddAccount;
diff --git a/ios/chrome/browser/ui/settings/autofill_collection_view_controller.h b/ios/chrome/browser/ui/settings/autofill_collection_view_controller.h
index 62f284d..1d192fd 100644
--- a/ios/chrome/browser/ui/settings/autofill_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/autofill_collection_view_controller.h
@@ -18,7 +18,8 @@
 // The designated initializer. |browserState| must not be nil.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_collection_view_controller.mm
index a6a164a..8020f0d7 100644
--- a/ios/chrome/browser/ui/settings/autofill_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_collection_view_controller.mm
@@ -72,7 +72,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.collectionViewAccessibilityIdentifier = @"kAutofillCollectionViewId";
     self.title = l10n_util::GetNSString(IDS_IOS_AUTOFILL);
diff --git a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.h b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.h
index 6a66a44..c64dc68 100644
--- a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.h
@@ -22,7 +22,8 @@
                personalDataManager:(autofill::PersonalDataManager*)dataManager
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
index d90d44d..ecfbcfb 100644
--- a/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_credit_card_edit_collection_view_controller.mm
@@ -67,7 +67,9 @@
 
 - (instancetype)initWithCreditCard:(const autofill::CreditCard&)creditCard
                personalDataManager:(autofill::PersonalDataManager*)dataManager {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     DCHECK(dataManager);
 
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
index 00458527..712dc97a 100644
--- a/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_edit_collection_view_controller.mm
@@ -43,8 +43,9 @@
 
 @implementation AutofillEditCollectionViewController
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  self = [super initWithStyle:style];
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style {
+  self = [super initWithLayout:layout style:style];
   if (!self) {
     return nil;
   }
diff --git a/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.h b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.h
index b85f03e..3839347 100644
--- a/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.h
@@ -23,7 +23,8 @@
                   personalDataManager:
                       (autofill::PersonalDataManager*)dataManager;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm
index 1c7c3b3d..846c71d 100644
--- a/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill_profile_edit_collection_view_controller.mm
@@ -94,7 +94,9 @@
             personalDataManager:(autofill::PersonalDataManager*)dataManager {
   DCHECK(dataManager);
 
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _personalDataManager = dataManager;
     _autofillProfile = profile;
diff --git a/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.h b/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.h
index 037b6b6..2e93667 100644
--- a/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.h
@@ -19,7 +19,8 @@
 // The designated initializer. |browserState| must not be nil.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 @end
 
diff --git a/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.mm b/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.mm
index 0e10a1e..008e603 100644
--- a/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/bandwidth_management_collection_view_controller.mm
@@ -63,7 +63,9 @@
 @implementation BandwidthManagementCollectionViewController
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_BANDWIDTH_MANAGEMENT_SETTINGS);
     self.collectionViewAccessibilityIdentifier = @"Bandwidth Management";
diff --git a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.h b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.h
index 3e200eca..da3df09 100644
--- a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.h
@@ -19,7 +19,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm
index 2494b4f9..0967faa 100644
--- a/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/block_popups_collection_view_controller.mm
@@ -66,7 +66,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _browserState = browserState;
     HostContentSettingsMap* settingsMap =
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.h b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.h
index 95216a1..e5cb3586 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.h
@@ -29,7 +29,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
index 006b73a1..496206a 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
@@ -185,7 +185,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.accessibilityTraits |= UIAccessibilityTraitButton;
 
diff --git a/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.h b/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.h
index 2be2972..4fda87cf 100644
--- a/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.h
@@ -16,9 +16,11 @@
 @interface ComposeEmailHandlerCollectionViewController
     : SettingsRootCollectionViewController
 
-- (instancetype)initWithRewriter:(MailtoURLRewriter*)rewriter;
+- (instancetype)initWithRewriter:(MailtoURLRewriter*)rewriter
+    NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.mm b/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.mm
index bea04a3..809e89b 100644
--- a/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/compose_email_handler_collection_view_controller.mm
@@ -40,7 +40,9 @@
 @implementation ComposeEmailHandlerCollectionViewController
 
 - (instancetype)initWithRewriter:(MailtoURLRewriter*)rewriter {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_COMPOSE_EMAIL_SETTING);
     self.collectionViewAccessibilityIdentifier =
diff --git a/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.h b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.h
index 7523cf17..26d96f5 100644
--- a/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.h
@@ -21,7 +21,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 @end
 
diff --git a/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm
index 25d33c5..b3cb537 100644
--- a/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm
@@ -82,7 +82,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     browserState_ = browserState;
     self.title = l10n_util::GetNSString(IDS_IOS_CONTENT_SETTINGS_TITLE);
diff --git a/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.h b/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.h
index 808b3f21..bd7cc887 100644
--- a/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.h
@@ -25,7 +25,8 @@
 // |browserState|.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.mm b/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.mm
index f77ec2f5..d938612 100644
--- a/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/contextual_search_collection_view_controller.mm
@@ -59,7 +59,9 @@
 
 - (instancetype)initWithPermissions:
     (TouchToSearchPermissionsMediator*)touchToSearchPermissions {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_CONTEXTUAL_SEARCH_TITLE);
     _touchToSearchPermissions = touchToSearchPermissions;
diff --git a/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.h b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.h
index 1f3eb36..2de250f 100644
--- a/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.h
@@ -19,7 +19,8 @@
                      wifiPref:(const char*)wifiPreference
                         title:(NSString*)title NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Returns the text for the current setting, based on the values of the
diff --git a/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
index 4aedf8b..a7682b8 100644
--- a/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
@@ -53,7 +53,9 @@
                      basePref:(const char*)basePreference
                      wifiPref:(const char*)wifiPreference
                         title:(NSString*)title {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = title;
     basePreference_.Init(basePreference, prefs);
@@ -63,11 +65,6 @@
   return self;
 }
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  NOTREACHED();
-  return nil;
-}
-
 - (void)loadModel {
   [super loadModel];
   CollectionViewModel* model = self.collectionViewModel;
diff --git a/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.h b/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.h
index 3193164..c905bbb 100644
--- a/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.h
@@ -13,7 +13,8 @@
     : SettingsRootCollectionViewController
 
 - (instancetype)initWithPrefs:(PrefService*)prefs NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.mm b/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.mm
index 65a91a7..c6f1ffa 100644
--- a/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/do_not_track_collection_view_controller.mm
@@ -53,7 +53,9 @@
 #pragma mark - Initialization
 
 - (instancetype)initWithPrefs:(PrefService*)prefs {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_DO_NOT_TRACK_MOBILE);
     _doNotTrackEnabled.Init(prefs::kEnableDoNotTrack, prefs);
diff --git a/ios/chrome/browser/ui/settings/handoff_collection_view_controller.h b/ios/chrome/browser/ui/settings/handoff_collection_view_controller.h
index df9b77b..738a955d 100644
--- a/ios/chrome/browser/ui/settings/handoff_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/handoff_collection_view_controller.h
@@ -19,7 +19,8 @@
 // The designated initializer. |browserState| must not be nil.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/ios/chrome/browser/ui/settings/handoff_collection_view_controller.mm b/ios/chrome/browser/ui/settings/handoff_collection_view_controller.mm
index 57d5425..89e4894 100644
--- a/ios/chrome/browser/ui/settings/handoff_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/handoff_collection_view_controller.mm
@@ -48,7 +48,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_CONTINUITY_LABEL);
     _handoffEnabled.Init(prefs::kIosHandoffToOtherDevices,
diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.h b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.h
index e107458..7343f2f 100644
--- a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.h
@@ -41,7 +41,8 @@
                          toEmail:(NSString*)toEmail
                       isSignedIn:(BOOL)isSignedIn NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
index cbcabba..6a7cea7 100644
--- a/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/import_data_collection_view_controller.mm
@@ -62,7 +62,9 @@
                       isSignedIn:(BOOL)isSignedIn {
   DCHECK(fromEmail);
   DCHECK(toEmail);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _delegate = delegate;
     _fromEmail = [fromEmail copy];
diff --git a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h
index f837fef..c6997dd 100644
--- a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h
+++ b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.h
@@ -12,7 +12,8 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
index 9afd756..4b6c87c 100644
--- a/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/material_cell_catalog_view_controller.mm
@@ -107,7 +107,9 @@
 @implementation MaterialCellCatalogViewController
 
 - (instancetype)init {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     [self loadModel];
   }
diff --git a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.h b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.h
index 64cd329..ee1604f 100644
--- a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.h
@@ -32,7 +32,8 @@
               password:(NSString*)password
                 origin:(NSString*)origin NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm
index 8d3dfa0..a5b5bfe 100644
--- a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm
@@ -87,7 +87,9 @@
                 origin:(NSString*)origin {
   DCHECK(delegate);
   DCHECK(reauthenticationModule);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _weakDelegate = delegate;
     _weakReauthenticationModule = reauthenticationModule;
diff --git a/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.h b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.h
index 13cf266..eb82c04 100644
--- a/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.h
@@ -19,7 +19,8 @@
 
 - (instancetype)init NS_UNAVAILABLE;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Given the current Physical Web preference state, determine whether the
diff --git a/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm
index 9ef7cff9..1d5283a 100644
--- a/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm
@@ -65,7 +65,9 @@
 #pragma mark - Initialization
 
 - (instancetype)initWithPrefs:(PrefService*)prefs {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_ENABLE_PHYSICAL_WEB);
     _physicalWebEnabled.Init(prefs::kIosPhysicalWebEnabled, prefs);
@@ -74,16 +76,6 @@
   return self;
 }
 
-- (instancetype)init {
-  NOTREACHED();
-  return nil;
-}
-
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
-  NOTREACHED();
-  return nil;
-}
-
 #pragma mark - Preference switch
 
 + (BOOL)shouldEnableForPreferenceState:(int)preferenceState {
diff --git a/ios/chrome/browser/ui/settings/privacy_collection_view_controller.h b/ios/chrome/browser/ui/settings/privacy_collection_view_controller.h
index 511e4d1..73a0faa 100644
--- a/ios/chrome/browser/ui/settings/privacy_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/privacy_collection_view_controller.h
@@ -21,7 +21,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle*)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/settings/privacy_collection_view_controller.mm b/ios/chrome/browser/ui/settings/privacy_collection_view_controller.mm
index 8fe037e..d19931e 100644
--- a/ios/chrome/browser/ui/settings/privacy_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/privacy_collection_view_controller.mm
@@ -115,7 +115,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _browserState = browserState;
     self.title =
diff --git a/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.h b/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.h
index 0bb2200..594e7773 100644
--- a/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.h
@@ -18,7 +18,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.mm b/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.mm
index 60bd7f3..95dc29e 100644
--- a/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.mm
@@ -175,7 +175,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     browserState_ = browserState;
     reauthenticationModule_ = [[ReauthenticationModule alloc]
diff --git a/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.h b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.h
index cbbc5615..a1115ae1 100644
--- a/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.h
@@ -16,7 +16,12 @@
     : SettingsRootCollectionViewController
 
 // The designated initializer. |browserState| must not be nil.
-- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState;
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
+    NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
+    NS_UNAVAILABLE;
 
 @end
 
diff --git a/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.mm
index 54a8085..badc421 100644
--- a/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/search_engine_settings_collection_view_controller.mm
@@ -80,7 +80,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     templateURLService_ =
         ios::TemplateURLServiceFactory::GetForBrowserState(browserState);
diff --git a/ios/chrome/browser/ui/settings/settings_collection_view_controller.h b/ios/chrome/browser/ui/settings/settings_collection_view_controller.h
index 664589b..0088828 100644
--- a/ios/chrome/browser/ui/settings/settings_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/settings_collection_view_controller.h
@@ -42,7 +42,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm
index 47f4dbe3..a6988c9 100644
--- a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm
@@ -235,10 +235,10 @@
 #pragma mark Initialization
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
-  // Checks that |browserState| is not an Incognito browser state.
-  DCHECK(browserState);
-  DCHECK_EQ(browserState, browserState->GetOriginalChromeBrowserState());
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  DCHECK(!browserState->IsOffTheRecord());
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _browserState = browserState;
     self.title = l10n_util::GetNSStringWithFixup(IDS_IOS_SETTINGS_TITLE);
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.h b/ios/chrome/browser/ui/settings/settings_navigation_controller.h
index 2afb19a..de84b6b 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.h
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.h
@@ -48,13 +48,12 @@
 
 // Creates a new SettingsCollectionViewController and the chrome around it.
 // |browserState| is used to personalize some settings aspects and should not be
-// nil. |delegate| may be nil.
-// clang-format off
-+ (SettingsNavigationController*)newSettingsMainControllerWithMainBrowserState:
-        (ios::ChromeBrowserState*)browserState
-                                                                      delegate:
-        (id<SettingsNavigationControllerDelegate>)delegate;
-// clang-format on
+// nil nor Off-the-Record. |delegate| may be nil.
++ (SettingsNavigationController*)
+newSettingsMainControllerWithBrowserState:(ios::ChromeBrowserState*)browserState
+                                 delegate:
+                                     (id<SettingsNavigationControllerDelegate>)
+                                         delegate;
 
 // Creates a new AccountsCollectionViewController and the chrome around it.
 // |browserState| is used to personalize some settings aspects and should not be
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
index 56309540..797b617 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -112,12 +112,11 @@
 
 #pragma mark - SettingsNavigationController methods.
 
-// clang-format off
-+ (SettingsNavigationController*)newSettingsMainControllerWithMainBrowserState:
-    (ios::ChromeBrowserState*)browserState
-                                                                      delegate:
-    (id<SettingsNavigationControllerDelegate>)delegate {
-  // clang-format on
++ (SettingsNavigationController*)
+newSettingsMainControllerWithBrowserState:(ios::ChromeBrowserState*)browserState
+                                 delegate:
+                                     (id<SettingsNavigationControllerDelegate>)
+                                         delegate {
   UIViewController* controller = [[SettingsCollectionViewController alloc]
       initWithBrowserState:browserState];
   SettingsNavigationController* nc = [[SettingsNavigationController alloc]
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller_unittest.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller_unittest.mm
index 95119d95..14390323 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller_unittest.mm
@@ -89,9 +89,9 @@
   @autoreleasepool {
     SettingsNavigationController* settingsController =
         [SettingsNavigationController
-            newSettingsMainControllerWithMainBrowserState:chrome_browser_state_
-                                                              .get()
-                                                 delegate:nil];
+            newSettingsMainControllerWithBrowserState:chrome_browser_state_
+                                                          .get()
+                                             delegate:nil];
     UIViewController* viewController =
         [[UIViewController alloc] initWithNibName:nil bundle:nil];
     [settingsController pushViewController:viewController animated:NO];
@@ -110,9 +110,9 @@
   @autoreleasepool {
     SettingsNavigationController* settingsController =
         [SettingsNavigationController
-            newSettingsMainControllerWithMainBrowserState:chrome_browser_state_
-                                                              .get()
-                                                 delegate:nil];
+            newSettingsMainControllerWithBrowserState:chrome_browser_state_
+                                                          .get()
+                                             delegate:nil];
     EXPECT_EQ(1U, [[settingsController viewControllers] count]);
 
     EXPECT_FALSE([settingsController popViewControllerAnimated:NO]);
@@ -127,9 +127,9 @@
   @autoreleasepool {
     SettingsNavigationController* settingsController =
         [SettingsNavigationController
-            newSettingsMainControllerWithMainBrowserState:chrome_browser_state_
-                                                              .get()
-                                                 delegate:mockDelegate_];
+            newSettingsMainControllerWithBrowserState:chrome_browser_state_
+                                                          .get()
+                                             delegate:mockDelegate_];
     UIViewController* viewController =
         [[UIViewController alloc] initWithNibName:nil bundle:nil];
     [settingsController pushViewController:viewController animated:NO];
@@ -149,9 +149,9 @@
   @autoreleasepool {
     SettingsNavigationController* settingsController =
         [SettingsNavigationController
-            newSettingsMainControllerWithMainBrowserState:chrome_browser_state_
-                                                              .get()
-                                                 delegate:mockDelegate_];
+            newSettingsMainControllerWithBrowserState:chrome_browser_state_
+                                                          .get()
+                                             delegate:mockDelegate_];
     EXPECT_EQ(1U, [[settingsController viewControllers] count]);
     [[mockDelegate_ expect] closeSettings];
     [settingsController popViewControllerOrCloseSettingsAnimated:NO];
diff --git a/ios/chrome/browser/ui/settings/settings_root_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/settings_root_collection_view_controller_unittest.mm
index 5f18be24..255555aa 100644
--- a/ios/chrome/browser/ui/settings/settings_root_collection_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/settings_root_collection_view_controller_unittest.mm
@@ -57,7 +57,8 @@
  public:
   SettingsRootCollectionViewControllerTest()
       : controller_([[TestSettingsRootCollectionViewController alloc]
-            initWithStyle:CollectionViewControllerStyleDefault]) {
+            initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+                     style:CollectionViewControllerStyleDefault]) {
     item1_ = [[CollectionViewItem alloc] initWithType:kItemTypeEnumZero];
     item2_ = [[CollectionViewItem alloc] initWithType:kItemTypeEnumZero + 10];
   }
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.h b/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.h
index 3013568..f352c4a 100644
--- a/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.h
@@ -18,7 +18,8 @@
 // Designated initializer. |browserState| must not be nil.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.mm
index f1e0498..04a2512 100644
--- a/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/sync_encryption_collection_view_controller.mm
@@ -65,7 +65,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_SYNC_ENCRYPTION_TITLE);
     _browserState = browserState;
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h
index bad5668..af4f92504 100644
--- a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h
@@ -44,7 +44,8 @@
 // |browserState| must not be nil.
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm
index c1d1f12..c774e86 100644
--- a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm
@@ -106,7 +106,9 @@
 
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_SYNC_ENTER_PASSPHRASE_TITLE);
     self.shouldHideDoneButton = YES;
diff --git a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.h b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.h
index f2c8cd0..9a4ec22b 100644
--- a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.h
@@ -27,7 +27,8 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
               allowSwitchSyncAccount:(BOOL)allowSwitchSyncAccount
     NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm
index 22ca935a..b79c346 100644
--- a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm
@@ -194,7 +194,9 @@
 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
               allowSwitchSyncAccount:(BOOL)allowSwitchSyncAccount {
   DCHECK(browserState);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _allowSwitchSyncAccount = allowSwitchSyncAccount;
     _browserState = browserState;
diff --git a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.h b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.h
index 73e8ce9e..ee4bdeb2 100644
--- a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.h
@@ -29,7 +29,8 @@
      delegate:(id<TimeRangeSelectorCollectionViewControllerDelegate>)delegate
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 // Returns the text for the current setting, based on the values of the
diff --git a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
index 40e2bc5..7ee9f1f 100644
--- a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
@@ -67,7 +67,9 @@
 - (instancetype)
 initWithPrefs:(PrefService*)prefs
      delegate:(id<TimeRangeSelectorCollectionViewControllerDelegate>)delegate {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     _weakDelegate = delegate;
     self.title = l10n_util::GetNSString(
diff --git a/ios/chrome/browser/ui/settings/translate_collection_view_controller.h b/ios/chrome/browser/ui/settings/translate_collection_view_controller.h
index 71cdb9c..de6c511 100644
--- a/ios/chrome/browser/ui/settings/translate_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/translate_collection_view_controller.h
@@ -15,7 +15,8 @@
 
 // |prefs| must not be nil.
 - (instancetype)initWithPrefs:(PrefService*)prefs NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/ios/chrome/browser/ui/settings/translate_collection_view_controller.mm b/ios/chrome/browser/ui/settings/translate_collection_view_controller.mm
index abce1f05..815eb0e 100644
--- a/ios/chrome/browser/ui/settings/translate_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/translate_collection_view_controller.mm
@@ -70,7 +70,9 @@
 
 - (instancetype)initWithPrefs:(PrefService*)prefs {
   DCHECK(prefs);
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_TRANSLATE_SETTING);
     self.collectionViewAccessibilityIdentifier =
diff --git a/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.h b/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.h
index 57c284a..c2072f5 100644
--- a/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.h
+++ b/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.h
@@ -16,7 +16,8 @@
 // The designated initializer.
 - (instancetype)initWithPrefs:(PrefService*)prefs NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithStyle:(CollectionViewControllerStyle)style
+- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
+                         style:(CollectionViewControllerStyle)style
     NS_UNAVAILABLE;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.mm b/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.mm
index 8c3b9696..a3f367e 100644
--- a/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/voicesearch_collection_view_controller.mm
@@ -54,7 +54,9 @@
 #pragma mark - Initialization
 
 - (instancetype)initWithPrefs:(PrefService*)prefs {
-  self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
+  self =
+      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_IOS_VOICE_SEARCH_SETTING_TITLE);
     _prefs = prefs;
diff --git a/ios/clean/chrome/browser/ui/settings/settings_coordinator.mm b/ios/clean/chrome/browser/ui/settings/settings_coordinator.mm
index 3fcc5f91..9712317 100644
--- a/ios/clean/chrome/browser/ui/settings/settings_coordinator.mm
+++ b/ios/clean/chrome/browser/ui/settings/settings_coordinator.mm
@@ -25,9 +25,8 @@
 
 - (void)start {
   self.viewController = [SettingsNavigationController
-      newSettingsMainControllerWithMainBrowserState:self.browser
-                                                        ->browser_state()
-                                           delegate:self];
+      newSettingsMainControllerWithBrowserState:self.browser->browser_state()
+                                       delegate:self];
   [super start];
 }
 
diff --git a/ios/showcase/content_suggestions/sc_content_suggestions_data_source.mm b/ios/showcase/content_suggestions/sc_content_suggestions_data_source.mm
index b8b4740c..6fdc54c7 100644
--- a/ios/showcase/content_suggestions/sc_content_suggestions_data_source.mm
+++ b/ios/showcase/content_suggestions/sc_content_suggestions_data_source.mm
@@ -138,7 +138,7 @@
 - (void)dismissSuggestion:(ContentSuggestionIdentifier*)suggestionIdentifier {
 }
 
-- (UIView*)headerView {
+- (UIView*)headerViewForWidth:(CGFloat)width {
   return nil;
 }
 
diff --git a/ios/showcase/payments/sc_payments_editor_coordinator.mm b/ios/showcase/payments/sc_payments_editor_coordinator.mm
index b5e09698..1d4ca68e 100644
--- a/ios/showcase/payments/sc_payments_editor_coordinator.mm
+++ b/ios/showcase/payments/sc_payments_editor_coordinator.mm
@@ -152,7 +152,8 @@
 
   self.paymentRequestEditViewController =
       [[PaymentRequestEditViewController alloc]
-          initWithStyle:CollectionViewControllerStyleAppBar];
+          initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+                   style:CollectionViewControllerStyleAppBar];
   [self.paymentRequestEditViewController setTitle:@"Add info"];
   self.mediator = [[SCPaymentsEditorMediator alloc] init];
   [self.mediator setConsumer:self.paymentRequestEditViewController];
diff --git a/ios/showcase/payments/sc_payments_selector_coordinator.mm b/ios/showcase/payments/sc_payments_selector_coordinator.mm
index b988bf1..bcb25ce 100644
--- a/ios/showcase/payments/sc_payments_selector_coordinator.mm
+++ b/ios/showcase/payments/sc_payments_selector_coordinator.mm
@@ -56,7 +56,8 @@
   self.alerter.baseViewController = self.baseViewController;
 
   self.selectorViewController = [[PaymentRequestSelectorViewController alloc]
-      initWithStyle:CollectionViewControllerStyleAppBar];
+      initWithLayout:[[MDCCollectionViewFlowLayout alloc] init]
+               style:CollectionViewControllerStyleAppBar];
   [self.selectorViewController setTitle:@"Select an item"];
   [self.selectorViewController setDataSource:self];
   [self.selectorViewController loadModel];
diff --git a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
index 0bdd2424..60b106ce 100644
--- a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
+++ b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
@@ -39,13 +39,6 @@
 # http://crbug.com/721398
 -ClearSiteDataThrottleBrowserTest.*
 
-# http://crbug.com/736362
--ServiceWorkerVersionBrowserTest.Activate_Rejected
--ServiceWorkerVersionBrowserTest.FetchEvent_Response
--ServiceWorkerVersionBrowserTest.Activate_NoEventListener
--ServiceWorkerVersionBrowserTest.FetchEvent_ResponseViaCache
--ServiceWorkerVersionBrowserTest.FetchEvent_respondWithRejection
-
 -AsyncResourceHandlerBrowserTest/AsyncResourceHandlerBrowserTest.UploadProgress*
 -BrowserSideNavigationBrowserTest.FailedNavigation
 -CrossSiteResourceHandlerTest.NoDeliveryToDetachedFrame
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 75de2e7..008cc444 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2077,7 +2077,7 @@
 crbug.com/626703 external/wpt/html/browsers/offline/no-appcache-in-shared-workers-historical.html [ Timeout ]
 crbug.com/626703 external/wpt/html/browsers/the-window-object/window-open-noopener.html [ Timeout ]
 crbug.com/626703 external/wpt/html/browsers/windows/noreferrer-window-name.html [ Timeout ]
-crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Timeout ]
+crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Timeout Crash ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html [ Timeout ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout ]
@@ -2973,3 +2973,4 @@
 crbug.com/734762 [ Mac Debug ] inspector-protocol/timeline/page-frames.js [ Failure ]
 
 crbug.com/736255 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-baseline-multi-item-vert-001b.html [ Skip ]
+crbug.com/736732 virtual/enable_wasm/external/wpt/wasm/wasm_local_iframe_test.html [ Timeout Pass ]
diff --git a/third_party/WebKit/LayoutTests/animations/custom-properties/image-type-interpolation.html b/third_party/WebKit/LayoutTests/animations/custom-properties/image-type-interpolation.html
new file mode 100644
index 0000000..4853b18
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/animations/custom-properties/image-type-interpolation.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<style>
+.parent {
+  --image: url('http://parent.png');
+}
+.target {
+  --image: url('http://underlying.png');
+}
+</style>
+<body>
+<script src="../interpolation/resources/interpolation-test.js"></script>
+<script>
+CSS.registerProperty({
+  name: '--image',
+  syntax: '<image>',
+  initialValue: "url('http://initial.png')",
+});
+
+assertInterpolation({
+  property: '--image',
+  from: neutralKeyframe,
+  to: "url('http://value.png')",
+}, [
+  {at: -0.3, is: "url('http://underlying.png')"},
+  {at: 0, is: "(url('http://underlying.png')"},
+  {at: 0.5, is: "-webkit-cross-fade(url('http://underlying.png'), url('http://value.png'), 0.5)"},
+  {at: 1, is: "url('http://value.png')"},
+  {at: 1.5, is: "url('http://value.png')"},
+]);
+
+assertInterpolation({
+  property: '--image',
+  from: 'initial',
+  to: "url('http://value.png')",
+}, [
+  {at: -0.3, is: "url('http://initial.png')"},
+  {at: 0, is: "url('http://initial.png')"},
+  {at: 0.5, is: "-webkit-cross-fade(url('http://initial.png'), url('http://value.png'), 0.5)"},
+  {at: 1, is: "url('http://value.png')"},
+  {at: 1.5, is: "url('http://value.png')"},
+]);
+
+assertInterpolation({
+  property: '--image',
+  from: 'inherit',
+  to: "url('http://value.png')",
+}, [
+  {at: -0.3, is: "url('http://parent.png')"},
+  {at: 0, is: "url('http://parent.png')"},
+  {at: 0.5, is: "-webkit-cross-fade(url('http://parent.png'), url('http://value.png'), 0.5)"},
+  {at: 1, is: "url('http://value.png')"},
+  {at: 1.5, is: "url('http://value.png')"},
+]);
+
+assertInterpolation({
+  property: '--image',
+  from: 'unset',
+  to: "url('http://value.png')",
+}, [
+  {at: -0.3, is: "url('http://initial.png')"},
+  {at: 0, is: "url('http://initial.png')"},
+  {at: 0.5, is: "-webkit-cross-fade(url('http://initial.png'), url('http://value.png'), 0.5)"},
+  {at: 1, is: "url('http://value.png')"},
+  {at: 1.5, is: "url('http://value.png')"},
+]);
+
+assertInterpolation({
+  property: '--image',
+  from: "url('http://a.png')",
+  to: "url('http://b.png')",
+}, [
+  {at: -0.3, is: "url('http://a.png')"},
+  {at: 0, is: "url('http://a.png')"},
+  {at: 0.5, is: "-webkit-cross-fade(url('http://a.png'), url('http://b.png'), 0.5)"},
+  {at: 1, is: "url('http://b.png')"},
+  {at: 1.5, is: "url('http://b.png')"},
+]);
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/animations/interpolation/border-width-interpolation.html b/third_party/WebKit/LayoutTests/animations/interpolation/border-width-interpolation.html
index b9733f4..92f75d5 100644
--- a/third_party/WebKit/LayoutTests/animations/interpolation/border-width-interpolation.html
+++ b/third_party/WebKit/LayoutTests/animations/interpolation/border-width-interpolation.html
@@ -105,7 +105,7 @@
   to: '13px'
 }, [
   {at: -2, is: '0px'}, // CSS border-left-width can't be negative.
-  {at: -0.25, is: '1px'},
+  {at: -0.25, is: '0.5px'},
   {at: 0, is: '3px'},
   {at: 0.3, is: '6px'},
   {at: 0.6, is: '9px'},
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1-expected.html b/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1-expected.html
new file mode 100644
index 0000000..eb2a0e36
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1-expected.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<style>
+
+div {
+  zoom: 0.5;
+  width: 140px;
+}
+
+span {
+  width: 68px;
+  display: inline-block;
+  background-color: lime;
+  padding: 1.0px;
+}
+
+</style>
+<body>
+
+<div>
+  <span>Shouldn't</span><span>wrap</span>
+</div>
+
+The border width should be 1px, reported as: 1px
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1.html b/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1.html
new file mode 100644
index 0000000..3cfab41
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/borders/border-width-below-1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<style>
+
+div#test {
+  zoom: 0.5;
+  width: 140px;
+  display: block;
+}
+
+span {
+  background-color: lime;
+  float: left;
+  width: 68px;
+  border: 1.0px solid lime;
+}
+
+</style>
+<body>
+
+<div id=test>
+  <span id=measure>Shouldn't</span>
+  <span>wrap</span>
+</div>
+
+<div style="clear: both" id=output></div>
+
+<script>
+var prop = window.getComputedStyle(document.getElementById("measure")).getPropertyValue("border-width");
+document.getElementById("output").innerHTML = "The border width should be 1px, reported as: " + prop;
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.png b/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.png
index d123604..825be11 100644
--- a/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.txt
index 60f9b41..9a85433 100644
--- a/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/reflections/reflection-with-zoom-expected.txt
@@ -5,4 +5,4 @@
     LayoutBlockFlow {BODY} at (6,6) size 788x588
       LayoutText {#text} at (0,0) size 0x0
 layer at (6,6) size 253x224
-  LayoutImage {IMG} at (0,0) size 253.25x224 [border: (1px solid #000000)]
+  LayoutImage {IMG} at (0,0) size 252.75x223.50 [border: (0.75px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2-expected.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2-expected.html
index 2781868..bb32f7a 100644
--- a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2-expected.html
@@ -12,26 +12,27 @@
         height: 80px;
         border: 1px solid green;
         background: lightgreen;
+        vertical-align: top;
         text-align: center;
         line-height: 80px;
       }
     </style>
   </head>
   <body>
-    <div class="test" style="border-width: 1px">0.25px</div>
-    <div class="test" style="border-width: 1px">0.5px</div>
-    <div class="test" style="border-width: 1px">0.75px</div>
+    <div class="test" style="border-width: 1px; width: 78.5px; height: 78.5px">0.25px</div>
+    <div class="test" style="border-width: 1px; width: 79px; height: 79px">0.5px</div>
+    <div class="test" style="border-width: 1px; width: 79.5px; height: 79.5px">0.75px</div>
     <div class="test" style="border-width: 1px">1px</div>
     <div class="test" style="border-width: 1px; width: 80.5px; height: 80.5px">1.25px</div>
     <br>
     <div class="test" style="border-width: 2px; width: 79px; height: 79px">1.5px</div>
     <div class="test" style="border-width: 2px; width: 79.5px; height: 79.5px">1.75px</div>
-    <div class="test" id="reference-2" style="border-width: 2px">2px</div>
+    <div class="test" style="border-width: 2px">2px</div>
     <div class="test" style="border-width: 2px; width: 80.5px; height: 80.5px">2.25px</div>
     <br>
     <div class="test" style="border-width: 3px; width: 79px; height: 79px">2.5px</div>
     <div class="test" style="border-width: 3px; width: 79.5px; height: 79.5px">2.75px</div>
-    <div class="test" id="reference-3" style="border-width: 3px">3px</div>
+    <div class="test" style="border-width: 3px">3px</div>
     <div class="test" style="border-width: 3px; width: 80.5px; height: 80.5px">3.25px</div>
     <p>
       Border thickness should be rounded, not floored, with the exception of
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2.html
index 2ede555..fc0e4048 100644
--- a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2.html
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border-2.html
@@ -18,7 +18,8 @@
     </style>
   </head>
   <body>
-    <div class="test" style="border-width: 0.25px">0.25px</div>
+    <!-- the padding-top property below had to be added to work around a bug. -->
+    <div class="test" style="padding-top: 0.25px; border-width: 0.25px">0.25px</div>
     <div class="test" style="border-width: 0.5px">0.5px</div>
     <div class="test" style="border-width: 0.75px">0.75px</div>
     <div class="test" style="border-width: 1px">1px</div>
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border.html
index 9b8d7fd..874ca2b 100644
--- a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border.html
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-border.html
@@ -37,11 +37,6 @@
         testElements[element.firstChild.nodeValue] = element;
       }
 
-      function sizeAsString(element) {
-        var rect = element.getBoundingClientRect();
-        return rect.width.toFixed(2) + 'x' + rect.height.toFixed(2);
-      }
-
       function borderAsString(element) {
         var style = window.getComputedStyle(element);
         return style.borderTopWidth + ' ' + style.borderRightWidth + ' ' +
@@ -49,32 +44,52 @@
       }
 
       test(function() {
-        var referenceSize = sizeAsString(testElements['1px']);
-        assert_equals(sizeAsString(testElements['0.25px']), referenceSize,
-            'Size of 0.25px box should match 1px reference.');
-        assert_equals(sizeAsString(testElements['0.5px']), referenceSize,
-            'Size of 0.5px box should match 1px reference.');
-        assert_equals(sizeAsString(testElements['0.75px']), referenceSize,
-            'Size of 0.75px box should match 1px reference.');
+        var refSize = testElements['0.25px'].getBoundingClientRect();
+        var testSize = testElements['0.5px'].getBoundingClientRect();
+        assert_greater_than(testSize.width, refSize.width,
+            'Size of 0.5px box should be larger than 0.25px box.');
+        assert_greater_than(testSize.height, refSize.height,
+            'Size of 0.5px box should be larger than 0.25px box.');
 
-        var refSize = testElements['1px'].getBoundingClientRect();
-        var testSize = testElements['1.25px'].getBoundingClientRect();
+        refSize = testSize;
+        testSize =  testElements['0.75px'].getBoundingClientRect();
+        assert_greater_than(testSize.width, refSize.width,
+            'Size of 0.75px box should be larger than 0.5px box.');
+        assert_greater_than(testSize.height, refSize.height,
+            'Size of 0.75px box should be larger than 0.5px box.');
+
+        refSize = testSize;
+        testSize =  testElements['1px'].getBoundingClientRect();
+        assert_greater_than(testSize.width, refSize.width,
+            'Size of 1px box should be larger than 0.75px box.');
+        assert_greater_than(testSize.height, refSize.height,
+            'Size of 1px box should be larger than 0.75px box.');
+
+        refSize = testSize;
+        testSize =  testElements['1.25px'].getBoundingClientRect();
         assert_greater_than(testSize.width, refSize.width,
             'Size of 1.25px box should be larger than 1px box.');
         assert_greater_than(testSize.height, refSize.height,
             'Size of 1.25px box should be larger than 1px box.');
+
+        refSize = testSize;
+        testSize =  testElements['1.5px'].getBoundingClientRect();
+        assert_greater_than(testSize.width, refSize.width,
+            'Size of 1.5px box should be larger than 1.25px box.');
+        assert_greater_than(testSize.height, refSize.height,
+            'Size of 1.5px box should be larger than 1.25px box.');
       }, 'Size of all elements are correct.');
 
       test(function() {
         assert_equals(borderAsString(testElements['0.25px']),
-            '1px 1px 1px 1px',
-            'Border thickness of 0.25px box should be 1px.');
+            '0.25px 0.25px 0.25px 0.25px',
+            'Border thickness of 0.25px box should be 0.25px.');
         assert_equals(borderAsString(testElements['0.5px']),
-            '1px 1px 1px 1px',
-            'Border thickness of 0.5px box should be 1px.');
+            '0.5px 0.5px 0.5px 0.5px',
+            'Border thickness of 0.5px box should be 0.5px.');
         assert_equals(borderAsString(testElements['0.75px']),
-            '1px 1px 1px 1px',
-            'Border thickness of 0.75px box should be 1px.');
+            '0.75px 0.75px 0.75px 0.75px',
+            'Border thickness of 0.75px box should be 0.75px.');
         assert_equals(borderAsString(testElements['1.25px']),
             '1.25px 1.25px 1.25px 1.25px',
             'Border thickness of 1.25px box should retain decimals.');
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
index af0bffe..c921182 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
index 2da3f50..913480e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.txt
index 9593b93..7a86c77 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-basic-expected.txt
@@ -106,13 +106,13 @@
             text run at (8,2) width 38: "foo"
       LayoutText {#text} at (175,236) size 4x19
         text run at (175,236) width 4: " "
-      LayoutMenuList {SELECT} at (181,241) size 32x14 [bgcolor=#DDDDDD] [border: (1px solid #A9A9A9)]
-        LayoutBlockFlow (anonymous) at (1,1) size 30x12
+      LayoutMenuList {SELECT} at (181,242) size 31x13 [bgcolor=#DDDDDD] [border: (0.50px solid #A9A9A9)]
+        LayoutBlockFlow (anonymous) at (0.50,0.50) size 30x12
           LayoutText (anonymous) at (2,0) size 13x12
             text run at (2,0) width 13: "foo"
-      LayoutText {#text} at (215,236) size 4x19
-        text run at (215,236) width 4: " "
-      LayoutBR {BR} at (219,236) size 0x19
+      LayoutText {#text} at (214,236) size 4x19
+        text run at (214,236) width 4: " "
+      LayoutBR {BR} at (218,236) size 0x19
       LayoutText {#text} at (208,283) size 4x19
         text run at (208,283) width 4: " "
       LayoutBR {BR} at (212,283) size 0x19
diff --git a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 7eb79f59..235489e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
index 50c0e13..16311f5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
@@ -1,30 +1,30 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x462
-  LayoutBlockFlow {HTML} at (0,0) size 800x462
-    LayoutBlockFlow {BODY} at (4,4) size 137x450 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10) size 135x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x461.50
+    LayoutBlockFlow {BODY} at (4,4) size 136x449 [border: (0.50px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.50,9.50) size 135x27
         LayoutText {#text} at (0,-2) size 135x30
           text run at (0,-2) width 135: "The following six blue boxes must"
           text run at (0,7) width 126: "be of the same width. There must"
           text run at (0,16) width 37: "be no red."
-      LayoutBlockFlow {P} at (10,46) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.50,45.50) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
         LayoutText {#text} at (9,7) size 2x12
           text run at (9,7) width 2: " "
-      LayoutBlockFlow {P} at (1,127) size 135x9
+      LayoutBlockFlow {P} at (0.50,126.50) size 135x9
         LayoutText {#text} at (0,-2) size 12x12
           text run at (0,-2) width 12: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,190) size 135x9
-      LayoutTable (anonymous) at (1,253) size 135x44
+      LayoutBlockFlow {P} at (0.50,189.50) size 135x9
+      LayoutTable (anonymous) at (0.50,252.50) size 135x44
         LayoutTableSection (anonymous) at (0,0) size 135x44
           LayoutTableRow (anonymous) at (0,0) size 135x44
             LayoutTableCell {P} at (0,0) size 135x44 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,351) size 135x44
+      LayoutTable {TABLE} at (0.50,350.50) size 135x44
         LayoutTableSection {TBODY} at (0,0) size 135x44
           LayoutTableRow {TR} at (0,0) size 135x44
             LayoutTableCell {TD} at (0,0) size 135x44 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,449) size 135x9
+      LayoutBlockFlow (floating) {P} at (0.50,448.50) size 135x9
 layer at (14,131) size 117x43
   LayoutEmbeddedObject {OBJECT} at (9,0) size 117x42.75 [bgcolor=#FF0000] [border: (9px solid #0000FF)]
     layer at (0,0) size 99x25
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
index ddcca6e..59f61c5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
index 29d785f..772f112e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
@@ -93,14 +93,14 @@
             LayoutTableCell {TD} at (319,289) size 140x38 [r=8 c=3 rs=1 cs=1]
               LayoutText {#text} at (0,0) size 0x0
 layer at (325,22) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
       LayoutSVGRoot {svg} at (0,0) size 133x29
         LayoutSVGEllipse {circle} at (0,0) size 220x220 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [cx=110.00] [cy=110.00] [r=110.00]
 layer at (325,61) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -109,7 +109,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,100) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -118,7 +118,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,139) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -127,7 +127,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,178) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -136,7 +136,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,217) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -145,7 +145,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,256) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -154,7 +154,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (325,295) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
index a60837d..9191ec5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
index e917c9e..78caf838 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
@@ -1,31 +1,31 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x474
-  LayoutBlockFlow {HTML} at (0,0) size 800x474.36
-    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.88x461.48 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10.25) size 138.88x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x473.94
+    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.03x460.64 [border: (0.58px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.58,9.83) size 138.88x27
         LayoutText {#text} at (0,-2) size 137x30
           text run at (0,-2) width 135: "The following six blue boxes must"
           text run at (0,7) width 137: "be of the same width. There must be"
           text run at (0,16) width 26: "no red."
-      LayoutBlockFlow {P} at (10.25,46.50) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.83,46.08) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
         LayoutText {#text} at (9,7) size 3x12
           text run at (9,7) width 3: " "
-      LayoutBlockFlow {P} at (1,129.80) size 138.88x9.25
+      LayoutBlockFlow {P} at (0.58,129.38) size 138.88x9.25
         LayoutText {#text} at (0,-2) size 12x12
           text run at (0,-2) width 12: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,194.59) size 138.88x9.25
-      LayoutTable (anonymous) at (1,259.39) size 138x45
+      LayoutBlockFlow {P} at (0.58,194.17) size 138.88x9.25
+      LayoutTable (anonymous) at (0.58,258.97) size 138x45
         LayoutTableSection (anonymous) at (0,0) size 138x45
           LayoutTableRow (anonymous) at (0,0) size 138x45
             LayoutTableCell {P} at (0,0) size 138x45 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,359.94) size 138x45
+      LayoutTable {TABLE} at (0.58,359.52) size 138x45
         LayoutTableSection {TBODY} at (0,0) size 138x45
           LayoutTableRow {TR} at (0,0) size 138x45
             LayoutTableCell {TD} at (0,0) size 138x45 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,460.48) size 138.88x9.25
-layer at (15,134) size 121x44
+      LayoutBlockFlow (floating) {P} at (0.58,460.06) size 138.88x9.25
+layer at (14,134) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,-0.25) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -33,7 +33,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,199) size 121x44
+layer at (14,199) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -41,7 +41,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,264) size 120x44
+layer at (14,264) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -49,7 +49,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,365) size 120x44
+layer at (14,364) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -57,7 +57,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,465) size 121x44
+layer at (14,465) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
index 267f7464..a0e35e9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
index 4d35420..51ec927 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
@@ -3,16 +3,16 @@
 layer at (0,0) size 800x377
   LayoutBlockFlow {HTML} at (0,0) size 800x377.09
     LayoutBlockFlow {BODY} at (5.55,5.55) size 788.91x366
-      LayoutText {#text} at (349,338) size 4x14
-        text run at (349,338) width 4: " "
-      LayoutBR {BR} at (352,338) size 1x14
+      LayoutText {#text} at (348,338) size 4x14
+        text run at (348,338) width 4: " "
+      LayoutBR {BR} at (351,338) size 1x14
       LayoutText {#text} at (0,352) size 234x14
         text run at (0,352) width 234: "The image of Tux should fill the entire red square."
       LayoutText {#text} at (0,0) size 0x0
       LayoutText {#text} at (0,0) size 0x0
       LayoutText {#text} at (0,0) size 0x0
 layer at (6,6) size 349x349
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 349.22x349.22 [border: (1px solid #FF0000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 348.59x348.59 [border: (0.69px solid #FF0000)]
     layer at (0,0) size 347x347
       LayoutView at (0,0) size 347x347
     layer at (0,0) size 347x347
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 7eb79f59..235489e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 8d0c456..e35a73c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
index c370f52..a460948 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
@@ -1,30 +1,30 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x464
-  LayoutBlockFlow {HTML} at (0,0) size 800x464
-    LayoutBlockFlow {BODY} at (4,4) size 137x452 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10) size 135x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x463.50
+    LayoutBlockFlow {BODY} at (4,4) size 136x451 [border: (0.50px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.50,9.50) size 135x27
         LayoutText {#text} at (0,-1) size 131x28
           text run at (0,-1) width 125: "The following six blue boxes must"
           text run at (0,8) width 131: "be of the same width. There must be"
           text run at (0,17) width 25: "no red."
-      LayoutBlockFlow {P} at (10,46) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.50,45.50) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
         LayoutText {#text} at (9,8) size 3x10
           text run at (9,8) width 3: " "
-      LayoutBlockFlow {P} at (1,127) size 135x9
+      LayoutBlockFlow {P} at (0.50,126.50) size 135x9
         LayoutText {#text} at (0,-1) size 14x10
           text run at (0,-1) width 14: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,190) size 135x9
-      LayoutTable (anonymous) at (1,253) size 135x45
+      LayoutBlockFlow {P} at (0.50,189.50) size 135x9
+      LayoutTable (anonymous) at (0.50,252.50) size 135x45
         LayoutTableSection (anonymous) at (0,0) size 135x45
           LayoutTableRow (anonymous) at (0,0) size 135x45
             LayoutTableCell {P} at (0,0) size 135x45 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,352) size 135x45
+      LayoutTable {TABLE} at (0.50,351.50) size 135x45
         LayoutTableSection {TBODY} at (0,0) size 135x45
           LayoutTableRow {TR} at (0,0) size 135x45
             LayoutTableCell {TD} at (0,0) size 135x45 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,451) size 135x9
+      LayoutBlockFlow (floating) {P} at (0.50,450.50) size 135x9
 layer at (14,131) size 117x43
   LayoutEmbeddedObject {OBJECT} at (9,0) size 117x42.75 [bgcolor=#FF0000] [border: (9px solid #0000FF)]
     layer at (0,0) size 99x25
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
index 8938c8b..d02e5887 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
index eb1e0515..078d1e9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
@@ -93,14 +93,14 @@
             LayoutTableCell {TD} at (321,289) size 140x38 [r=8 c=3 rs=1 cs=1]
               LayoutText {#text} at (0,0) size 0x0
 layer at (327,22) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
       LayoutSVGRoot {svg} at (0,0) size 133x29
         LayoutSVGEllipse {circle} at (0,0) size 220x220 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [cx=110.00] [cy=110.00] [r=110.00]
 layer at (327,61) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -109,7 +109,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,100) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -118,7 +118,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,139) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -127,7 +127,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,178) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -136,7 +136,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,217) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -145,7 +145,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,256) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -154,7 +154,7 @@
         LayoutSVGContainer {g} at (162.86,375.72) size 362.86x390.92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,375.72) size 362.86x390.92 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (327,295) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
index 476b04e0..f415edb2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
index d051863c..01a4bcb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
@@ -1,31 +1,31 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x476
-  LayoutBlockFlow {HTML} at (0,0) size 800x476.36
-    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.88x463.48 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10.25) size 138.88x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x475.94
+    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.03x462.64 [border: (0.58px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.58,9.83) size 138.88x27
         LayoutText {#text} at (0,-1) size 135x28
           text run at (0,-1) width 129: "The following six blue boxes must"
           text run at (0,8) width 135: "be of the same width. There must be"
           text run at (0,17) width 26: "no red."
-      LayoutBlockFlow {P} at (10.25,46.50) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.83,46.08) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
         LayoutText {#text} at (9,8) size 3x10
           text run at (9,8) width 3: " "
-      LayoutBlockFlow {P} at (1,129.80) size 138.88x9.25
+      LayoutBlockFlow {P} at (0.58,129.38) size 138.88x9.25
         LayoutText {#text} at (0,-1) size 14x10
           text run at (0,-1) width 14: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,194.59) size 138.88x9.25
-      LayoutTable (anonymous) at (1,259.39) size 138x46
+      LayoutBlockFlow {P} at (0.58,194.17) size 138.88x9.25
+      LayoutTable (anonymous) at (0.58,258.97) size 138x46
         LayoutTableSection (anonymous) at (0,0) size 138x46
           LayoutTableRow (anonymous) at (0,0) size 138x46
             LayoutTableCell {P} at (0,0) size 138x46 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,360.94) size 138x46
+      LayoutTable {TABLE} at (0.58,360.52) size 138x46
         LayoutTableSection {TBODY} at (0,0) size 138x46
           LayoutTableRow {TR} at (0,0) size 138x46
             LayoutTableCell {TD} at (0,0) size 138x46 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,462.48) size 138.88x9.25
-layer at (15,134) size 121x44
+      LayoutBlockFlow (floating) {P} at (0.58,462.06) size 138.88x9.25
+layer at (14,134) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,-0.25) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -33,7 +33,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,199) size 121x44
+layer at (14,199) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -41,7 +41,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,264) size 120x44
+layer at (14,264) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -49,7 +49,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,366) size 120x44
+layer at (14,365) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -57,7 +57,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,467) size 121x44
+layer at (14,467) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
index 64b0b2b..8be60c9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
index 4f3873db..624c610 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
@@ -3,8 +3,8 @@
 layer at (0,0) size 800x376
   LayoutBlockFlow {HTML} at (0,0) size 800x376.09
     LayoutBlockFlow {BODY} at (5.55,5.55) size 788.91x365
-      LayoutText {#text} at (349,339) size 3x13
-        text run at (349,339) width 3: " "
+      LayoutText {#text} at (348,339) size 4x13
+        text run at (348,339) width 4: " "
       LayoutBR {BR} at (351,339) size 1x13
       LayoutText {#text} at (0,352) size 223x13
         text run at (0,352) width 223: "The image of Tux should fill the entire red square."
@@ -12,7 +12,7 @@
       LayoutText {#text} at (0,0) size 0x0
       LayoutText {#text} at (0,0) size 0x0
 layer at (6,6) size 349x349
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 349.22x349.22 [border: (1px solid #FF0000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 348.59x348.59 [border: (0.69px solid #FF0000)]
     layer at (0,0) size 347x347
       LayoutView at (0,0) size 347x347
     layer at (0,0) size 347x347
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 8d0c456..e35a73c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
index 231d1e4..03b86c5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
index 0a486f7..9fd1b532 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.txt
index caf4df5..d07e72d1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-basic-expected.txt
@@ -106,13 +106,13 @@
             text run at (8,2) width 37: "foo"
       LayoutText {#text} at (181,236) size 4x19
         text run at (181,236) width 4: " "
-      LayoutMenuList {SELECT} at (187,241) size 35x14 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
-        LayoutBlockFlow (anonymous) at (1,1) size 33x12
+      LayoutMenuList {SELECT} at (187,242) size 34x13 [bgcolor=#FFFFFF] [border: (0.50px solid #A9A9A9)]
+        LayoutBlockFlow (anonymous) at (0.50,0.50) size 33x12
           LayoutText (anonymous) at (2,0) size 14x12
             text run at (2,0) width 14: "foo"
-      LayoutText {#text} at (224,236) size 4x19
-        text run at (224,236) width 4: " "
-      LayoutBR {BR} at (228,236) size 0x19
+      LayoutText {#text} at (223,236) size 4x19
+        text run at (223,236) width 4: " "
+      LayoutBR {BR} at (227,236) size 0x19
       LayoutText {#text} at (208,283) size 4x19
         text run at (208,283) width 4: " "
       LayoutBR {BR} at (212,283) size 0x19
diff --git a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 47f0ec68..b08e2eff 100644
--- a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
index e996e087..527c499a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.txt
@@ -1,30 +1,30 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x462
-  LayoutBlockFlow {HTML} at (0,0) size 800x462
-    LayoutBlockFlow {BODY} at (4,4) size 137x450 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10) size 135x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x461.50
+    LayoutBlockFlow {BODY} at (4,4) size 136x449 [border: (0.50px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.50,9.50) size 135x27
         LayoutText {#text} at (0,-2) size 133x30
           text run at (0,-2) width 130: "The following six blue boxes must"
           text run at (0,7) width 133: "be of the same width. There must be"
           text run at (0,16) width 26: "no red."
-      LayoutBlockFlow {P} at (10,46) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.50,45.50) size 117x27 [bgcolor=#008000] [border: (9px solid #0000FF)]
         LayoutText {#text} at (9,7) size 2x12
           text run at (9,7) width 2: " "
-      LayoutBlockFlow {P} at (1,127) size 135x9
+      LayoutBlockFlow {P} at (0.50,126.50) size 135x9
         LayoutText {#text} at (0,-2) size 12x12
           text run at (0,-2) width 12: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,190) size 135x9
-      LayoutTable (anonymous) at (1,253) size 135x44
+      LayoutBlockFlow {P} at (0.50,189.50) size 135x9
+      LayoutTable (anonymous) at (0.50,252.50) size 135x44
         LayoutTableSection (anonymous) at (0,0) size 135x44
           LayoutTableRow (anonymous) at (0,0) size 135x44
             LayoutTableCell {P} at (0,0) size 135x44 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,351) size 135x44
+      LayoutTable {TABLE} at (0.50,350.50) size 135x44
         LayoutTableSection {TBODY} at (0,0) size 135x44
           LayoutTableRow {TR} at (0,0) size 135x44
             LayoutTableCell {TD} at (0,0) size 135x44 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,449) size 135x9
+      LayoutBlockFlow (floating) {P} at (0.50,448.50) size 135x9
 layer at (14,131) size 117x43
   LayoutEmbeddedObject {OBJECT} at (9,0) size 117x42.75 [bgcolor=#FF0000] [border: (9px solid #0000FF)]
     layer at (0,0) size 99x25
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
index d0f3f4a..8498b7f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
index 977ea85..b03fc463 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
@@ -93,14 +93,14 @@
             LayoutTableCell {TD} at (326,289) size 140x38 [r=8 c=3 rs=1 cs=1]
               LayoutText {#text} at (0,0) size 0x0
 layer at (332,22) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
       LayoutSVGRoot {svg} at (0,0) size 133x29
         LayoutSVGEllipse {circle} at (0,0) size 220x220 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [cx=110.00] [cy=110.00] [r=110.00]
 layer at (332,61) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -109,7 +109,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,100) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -118,7 +118,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,139) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -127,7 +127,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,178) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -136,7 +136,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,217) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -145,7 +145,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,256) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
@@ -154,7 +154,7 @@
         LayoutSVGContainer {g} at (162.86,403.79) size 362.86x362.86 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-162.36,-403.29)}]
           LayoutSVGPath {path} at (162.86,403.79) size 362.86x362.86 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#D9BB7A] [fill rule=EVEN-ODD]}] [data="M 525.714 585.219 A 181.429 181.429 0 1 1 162.857 585.219 A 181.429 181.429 0 1 1 525.714 585.219 Z"]
 layer at (332,295) size 139x35
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (1px dashed #008000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 138.88x34.72 [border: (0.69px dashed #008000)]
     layer at (0,0) size 133x29
       LayoutView at (0,0) size 133x29
     layer at (0,0) size 133x29
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
index 28d63d0..9b89ee50 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
index 4ef2509..1758416 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
@@ -1,31 +1,31 @@
 layer at (0,0) size 800x600
   LayoutView at (0,0) size 800x600
 layer at (0,0) size 800x474
-  LayoutBlockFlow {HTML} at (0,0) size 800x474.36
-    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.88x461.48 [border: (1px dashed #C0C0C0)]
-      LayoutBlockFlow {P} at (1,10.25) size 138.88x27
+  LayoutBlockFlow {HTML} at (0,0) size 800x473.94
+    LayoutBlockFlow {BODY} at (4.63,4.63) size 140.03x460.64 [border: (0.58px dashed #C0C0C0)]
+      LayoutBlockFlow {P} at (0.58,9.83) size 138.88x27
         LayoutText {#text} at (0,-2) size 133x30
           text run at (0,-2) width 130: "The following six blue boxes must"
           text run at (0,7) width 133: "be of the same width. There must be"
           text run at (0,16) width 26: "no red."
-      LayoutBlockFlow {P} at (10.25,46.50) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
+      LayoutBlockFlow {P} at (9.83,46.08) size 120.38x27.75 [bgcolor=#008000] [border: (9.25px solid #0000FF)]
         LayoutText {#text} at (9,7) size 3x12
           text run at (9,7) width 3: " "
-      LayoutBlockFlow {P} at (1,129.80) size 138.88x9.25
+      LayoutBlockFlow {P} at (0.58,129.38) size 138.88x9.25
         LayoutText {#text} at (0,-2) size 12x12
           text run at (0,-2) width 12: "      "
         LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {P} at (1,194.59) size 138.88x9.25
-      LayoutTable (anonymous) at (1,259.39) size 138x45
+      LayoutBlockFlow {P} at (0.58,194.17) size 138.88x9.25
+      LayoutTable (anonymous) at (0.58,258.97) size 138x45
         LayoutTableSection (anonymous) at (0,0) size 138x45
           LayoutTableRow (anonymous) at (0,0) size 138x45
             LayoutTableCell {P} at (0,0) size 138x45 [r=0 c=0 rs=1 cs=1]
-      LayoutTable {TABLE} at (1,359.94) size 138x45
+      LayoutTable {TABLE} at (0.58,359.52) size 138x45
         LayoutTableSection {TBODY} at (0,0) size 138x45
           LayoutTableRow {TR} at (0,0) size 138x45
             LayoutTableCell {TD} at (0,0) size 138x45 [r=0 c=0 rs=1 cs=1]
-      LayoutBlockFlow (floating) {P} at (1,460.48) size 138.88x9.25
-layer at (15,134) size 121x44
+      LayoutBlockFlow (floating) {P} at (0.58,460.06) size 138.88x9.25
+layer at (14,134) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,-0.25) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -33,7 +33,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,199) size 121x44
+layer at (14,199) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
@@ -41,7 +41,7 @@
       LayoutSVGRoot {svg} at (0,0) size 102x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,264) size 120x44
+layer at (14,264) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -49,7 +49,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,365) size 120x44
+layer at (14,364) size 120x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 119.50x43.75 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 101x25
       LayoutView at (0,0) size 101x25
@@ -57,7 +57,7 @@
       LayoutSVGRoot {svg} at (0,0) size 101x25
         LayoutSVGRect {rect} at (0,0) size 1000x250 [stroke={[type=SOLID] [color=#008000] [stroke width=12.00]}] [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=1000.00] [height=250.00]
         LayoutSVGPath {path} at (150,50) size 700x150 [fill={[type=SOLID] [color=#008000]}] [data="M 500 50 L 150 200 L 850 200 Z"]
-layer at (15,465) size 121x44
+layer at (14,465) size 121x44
   LayoutEmbeddedObject {OBJECT} at (9.25,0) size 120.38x43.97 [bgcolor=#FF0000] [border: (9.25px solid #0000FF)]
     layer at (0,0) size 102x25
       LayoutView at (0,0) size 102x25
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
index c5bf0e4..d691729 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
index 4d56d3a..e575d35 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
@@ -3,16 +3,16 @@
 layer at (0,0) size 800x377
   LayoutBlockFlow {HTML} at (0,0) size 800x377.09
     LayoutBlockFlow {BODY} at (5.55,5.55) size 788.91x366
-      LayoutText {#text} at (349,338) size 4x14
-        text run at (349,338) width 4: " "
-      LayoutBR {BR} at (352,338) size 1x14
+      LayoutText {#text} at (348,338) size 4x14
+        text run at (348,338) width 4: " "
+      LayoutBR {BR} at (351,338) size 1x14
       LayoutText {#text} at (0,352) size 231x14
         text run at (0,352) width 231: "The image of Tux should fill the entire red square."
       LayoutText {#text} at (0,0) size 0x0
       LayoutText {#text} at (0,0) size 0x0
       LayoutText {#text} at (0,0) size 0x0
 layer at (6,6) size 349x349
-  LayoutEmbeddedObject {OBJECT} at (0,0) size 349.22x349.22 [border: (1px solid #FF0000)]
+  LayoutEmbeddedObject {OBJECT} at (0,0) size 348.59x348.59 [border: (0.69px solid #FF0000)]
     layer at (0,0) size 347x347
       LayoutView at (0,0) size 347x347
     layer at (0,0) size 347x347
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
index 47f0ec68..b08e2eff 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl
index cbc92ef..8df375e 100644
--- a/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl
+++ b/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl
@@ -414,12 +414,13 @@
 {##############################################################################}
 {% block install_dom_template %}
 {% if not is_array_buffer_or_view %}
-{% from 'methods.cpp.tmpl' import install_custom_signature with context %}
+{% from 'methods.cpp.tmpl' import install_custom_signature,
+        method_configuration with context %}
 {% from 'attributes.cpp.tmpl' import accessor_configuration,
         attribute_configuration,
         with context %}
- {% from 'constants.cpp.tmpl' import install_constants, constant_configuration with context %}
-{% from 'methods.cpp.tmpl' import method_configuration with context %}
+{% from 'constants.cpp.tmpl' import install_constants,
+        constant_configuration with context %}
 {% if has_partial_interface or is_partial %}
 void {{v8_class_or_partial}}::install{{v8_class}}Template(
     v8::Isolate* isolate,
@@ -752,7 +753,6 @@
 {% endblock %}
 {##############################################################################}
 {% block install_runtime_enabled %}
-#line 759 "interface_base.cpp.tmpl"
 {% if needs_runtime_enabled_installer %}
 {% from 'attributes.cpp.tmpl' import accessor_configuration,
         attribute_configuration,
@@ -765,7 +765,7 @@
     v8::Local<v8::Object> prototype,
     v8::Local<v8::Function> interface) {
   {% if runtime_enabled_feature_name %}
-#error "We don't expect a runtime enabled interface {{v8_class_or_partial}} to have installRuntimeEnabledFeatures()."
+#error "We don't expect a runtime enabled interface {{v8_class_or_partial}} to have InstallRuntimeEnabledFeatures()."
   {% endif %}
 
   {% if is_partial %}
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 cee026a8..cdd4ea9e 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
@@ -65,7 +65,6 @@
     "[ActiveScriptWrappable] extended attribute in the IDL file.  "
     "Be consistent.");
 
-#line 759 "interface_base.cpp.tmpl"
 TestArrayBuffer* V8ArrayBuffer::toImpl(v8::Local<v8::Object> object) {
   DCHECK(object->IsArrayBuffer());
   v8::Local<v8::ArrayBuffer> v8buffer = object.As<v8::ArrayBuffer>();
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 a8f182f..f9c8a724 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
@@ -76,7 +76,6 @@
     "[ActiveScriptWrappable] extended attribute in the IDL file.  "
     "Be consistent.");
 
-#line 759 "interface_base.cpp.tmpl"
 TestArrayBufferView* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object) {
   DCHECK(object->IsArrayBufferView());
   ScriptWrappable* scriptWrappable = ToScriptWrappable(object);
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 8fc88b8..498b519 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
@@ -65,7 +65,6 @@
     "[ActiveScriptWrappable] extended attribute in the IDL file.  "
     "Be consistent.");
 
-#line 759 "interface_base.cpp.tmpl"
 TestDataView* V8DataView::toImpl(v8::Local<v8::Object> object) {
   DCHECK(object->IsDataView());
   ScriptWrappable* scriptWrappable = ToScriptWrappable(object);
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 fd8e042..d2bfd88 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -154,7 +154,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8SVGTestInterface::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8SVGTestInterfaceTemplate);
 }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
index 05d22d7..affe2f03b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
@@ -294,7 +294,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestCallbackFunctions::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestCallbackFunctionsTemplate);
 }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
index 5ccf5daa..b0abc15 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestConstants.cpp
@@ -192,7 +192,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 void V8TestConstants::installFeatureName1(v8::Isolate* isolate, const DOMWrapperWorld& world, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface) {
   const V8DOMConfiguration::ConstantConfiguration constantFeature1OriginTrialEnabledConst1Configuration = {"FEATURE1_ORIGIN_TRIAL_ENABLED_CONST1", 6, 0, V8DOMConfiguration::kConstantTypeShort};
   V8DOMConfiguration::InstallConstant(isolate, interface, prototype, constantFeature1OriginTrialEnabledConst1Configuration);
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 eb0bb6f..eb463a9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -197,7 +197,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestException::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestExceptionTemplate);
 }
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 af91630..b71f155 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -239,7 +239,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestIntegerIndexed::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestIntegerIndexedTemplate);
 }
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 24a90e5a..e244e41 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -242,7 +242,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestIntegerIndexedGlobal::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestIntegerIndexedGlobalTemplate);
 }
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 e891fe6..d2b0c00d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -242,7 +242,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestIntegerIndexedPrimaryGlobal::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestIntegerIndexedPrimaryGlobalTemplate);
 }
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 7ba749d..99139e1 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -3173,7 +3173,6 @@
   }
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterface::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), V8TestInterface::installV8TestInterfaceTemplateFunction);
 }
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 02e5c24..56ba60bc 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -696,7 +696,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterface2::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), V8TestInterface2::installV8TestInterface2TemplateFunction);
 }
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 b8f1cfbc..bb1571e8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -245,7 +245,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterface3::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterface3Template);
 }
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 66835a3e..5ab47ab 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -600,7 +600,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceCheckSecurity::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceCheckSecurityTemplate);
 }
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 c94023d..55e55bf 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -476,7 +476,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceConstructor::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceConstructorTemplate);
 }
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 731802f..ec3fbfa8 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -286,7 +286,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceConstructor2::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceConstructor2Template);
 }
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 7844d2d..a29673b 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -139,7 +139,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceConstructor3::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceConstructor3Template);
 }
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 b89fd17e..98b7ec9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -172,7 +172,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceConstructor4::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceConstructor4Template);
 }
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 8f9903b39..f34bafe 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -120,7 +120,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceCustomConstructor::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceCustomConstructorTemplate);
 }
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 209c74c..ffb4b99 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -156,7 +156,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceDocument::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceDocumentTemplate);
 }
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 4f3e078b..860827f 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
@@ -103,7 +103,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceEmpty::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceEmptyTemplate);
 }
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 35524c8e..ad5f79d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -185,7 +185,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceEventInitConstructor::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceEventInitConstructorTemplate);
 }
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 1e368a4..714614e6 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -192,7 +192,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceEventTarget::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceEventTargetTemplate);
 }
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 98b4d52..d7edfff 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -444,7 +444,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceGarbageCollected::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceGarbageCollectedTemplate);
 }
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 abb4d35..8561eb12 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -270,7 +270,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceNamedConstructor::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceNamedConstructorTemplate);
 }
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 d0c597a..1c726c9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -202,7 +202,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceNamedConstructor2::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceNamedConstructor2Template);
 }
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 083f0f5..33e9d24 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -439,7 +439,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceNode::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceNodeTemplate);
 }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
index 0004bd0..c780dd0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
@@ -345,7 +345,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceOriginTrialEnabled::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceOriginTrialEnabledTemplate);
 }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
index 27586bdf..c3669d7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
@@ -412,7 +412,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterfaceSecureContext::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceSecureContextTemplate);
 }
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 74cb9835..ca7aa68 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -288,7 +288,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestNode::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestNodeTemplate);
 }
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 658e6365..35c98a3c 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -12974,7 +12974,6 @@
   }
 }
 
-#line 759 "interface_base.cpp.tmpl"
 void V8TestObject::installFeatureName(v8::Isolate* isolate, const DOMWrapperWorld& world, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface) {
   v8::Local<v8::FunctionTemplate> interfaceTemplate = V8TestObject::wrapperTypeInfo.domTemplate(isolate, world);
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
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 4f61cde..fc50996 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -234,7 +234,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestSpecialOperations::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestSpecialOperationsTemplate);
 }
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 9ef879e7..b604394 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -146,7 +146,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestSpecialOperationsNotEnumerable::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestSpecialOperationsNotEnumerableTemplate);
 }
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 b39256c..6068add7 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -561,7 +561,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestTypedefs::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestTypedefsTemplate);
 }
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 9b6e6b7..1a679d0 100644
--- a/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
@@ -58,7 +58,6 @@
     "[ActiveScriptWrappable] extended attribute in the IDL file.  "
     "Be consistent.");
 
-#line 759 "interface_base.cpp.tmpl"
 TestUint8ClampedArray* V8Uint8ClampedArray::toImpl(v8::Local<v8::Object> object) {
   DCHECK(object->IsUint8ClampedArray());
   ScriptWrappable* scriptWrappable = ToScriptWrappable(object);
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
index 921cb23d..7535222d 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
@@ -124,8 +124,6 @@
   }
 }
 
-#line 759 "interface_base.cpp.tmpl"
-
 void V8TestInterface2Partial::initialize() {
   // Should be invoked from ModulesInitializer.
   V8TestInterface2::UpdateWrapperTypeInfo(
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 fc77079..769e6c2 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -935,7 +935,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestInterface5::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestInterface5Template);
 }
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
index a63c6d0..070f582 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
@@ -478,7 +478,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 void V8TestInterfacePartial::installOriginTrialPartialFeature(v8::Isolate* isolate, const DOMWrapperWorld& world, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface) {
   v8::Local<v8::FunctionTemplate> interfaceTemplate = V8TestInterface::wrapperTypeInfo.domTemplate(isolate, world);
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp
index 13a25ff..07ad9b9 100644
--- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp
+++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp
@@ -186,7 +186,6 @@
   // Custom signature
 }
 
-#line 759 "interface_base.cpp.tmpl"
 v8::Local<v8::FunctionTemplate> V8TestSubObject::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
   return V8DOMConfiguration::DomClassTemplate(isolate, world, const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), installV8TestSubObjectTemplate);
 }
diff --git a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
index b8daf35..daf53ac 100644
--- a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
@@ -106,7 +106,14 @@
                                           end.non_interpolable_value));
 }
 
-CSSValue* CSSImageInterpolationType::CreateCSSValue(
+const CSSValue* CSSImageInterpolationType::CreateCSSValue(
+    const InterpolableValue& interpolable_value,
+    const NonInterpolableValue* non_interpolable_value,
+    const StyleResolverState&) const {
+  return StaticCreateCSSValue(interpolable_value, non_interpolable_value);
+}
+
+const CSSValue* CSSImageInterpolationType::StaticCreateCSSValue(
     const InterpolableValue& interpolable_value,
     const NonInterpolableValue* non_interpolable_value) {
   return ToCSSImageNonInterpolableValue(non_interpolable_value)
@@ -118,7 +125,8 @@
     const InterpolableValue& interpolable_value,
     const NonInterpolableValue* non_interpolable_value,
     StyleResolverState& state) {
-  CSSValue* image = CreateCSSValue(interpolable_value, non_interpolable_value);
+  const CSSValue* image =
+      StaticCreateCSSValue(interpolable_value, non_interpolable_value);
   return state.GetStyleImage(property, *image);
 }
 
diff --git a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.h
index cc5d82c7..701548f 100644
--- a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.h
@@ -13,8 +13,9 @@
 
 class CSSImageInterpolationType : public CSSInterpolationType {
  public:
-  CSSImageInterpolationType(PropertyHandle property)
-      : CSSInterpolationType(property) {}
+  CSSImageInterpolationType(PropertyHandle property,
+                            const PropertyRegistration* registration = nullptr)
+      : CSSInterpolationType(property, registration) {}
 
   InterpolationValue MaybeConvertStandardPropertyUnderlyingValue(
       const ComputedStyle&) const final;
@@ -37,8 +38,6 @@
   static PairwiseInterpolationValue StaticMergeSingleConversions(
       InterpolationValue&& start,
       InterpolationValue&& end);
-  static CSSValue* CreateCSSValue(const InterpolableValue&,
-                                  const NonInterpolableValue*);
   static StyleImage* ResolveStyleImage(CSSPropertyID,
                                        const InterpolableValue&,
                                        const NonInterpolableValue*,
@@ -62,6 +61,12 @@
       InterpolationValue&& end) const final {
     return StaticMergeSingleConversions(std::move(start), std::move(end));
   }
+
+  static const CSSValue* StaticCreateCSSValue(const InterpolableValue&,
+                                              const NonInterpolableValue*);
+  const CSSValue* CreateCSSValue(const InterpolableValue&,
+                                 const NonInterpolableValue*,
+                                 const StyleResolverState&) const final;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
index 1e55ba38..14c85b9 100644
--- a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
@@ -376,6 +376,9 @@
             WTF::MakeUnique<CSSTimeInterpolationType>(property, &registration));
         break;
       case CSSSyntaxType::kImage:
+        result.push_back(WTF::MakeUnique<CSSImageInterpolationType>(
+            property, &registration));
+        break;
       case CSSSyntaxType::kUrl:
       case CSSSyntaxType::kInteger:
       case CSSSyntaxType::kTransformList:
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.json5 b/third_party/WebKit/Source/core/css/CSSProperties.json5
index fa5f10b..a21ef9d7 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.json5
+++ b/third_party/WebKit/Source/core/css/CSSProperties.json5
@@ -755,7 +755,7 @@
     {
       name: "border-bottom-width",
       api_class: "CSSPropertyAPIBorderWidth",
-      converter: "ConvertLineWidth<float>",
+      converter: "ConvertBorderWidth",
       interpolable: true,
       keywords: ["thin", "medium", "thick"],
       typedom_types: ["Length"],
@@ -827,7 +827,7 @@
     {
       name: "border-left-width",
       api_class: "CSSPropertyAPIBorderWidth",
-      converter: "ConvertLineWidth<float>",
+      converter: "ConvertBorderWidth",
       interpolable: true,
       keywords: ["thin", "medium", "thick"],
       typedom_types: ["Length"],
@@ -859,7 +859,7 @@
     {
       name: "border-right-width",
       api_class: "CSSPropertyAPIBorderWidth",
-      converter: "ConvertLineWidth<float>",
+      converter: "ConvertBorderWidth",
       interpolable: true,
       keywords: ["thin", "medium", "thick"],
       typedom_types: ["Length"],
@@ -915,7 +915,7 @@
     {
       name: "border-top-width",
       api_class: "CSSPropertyAPIBorderWidth",
-      converter: "ConvertLineWidth<float>",
+      converter: "ConvertBorderWidth",
       interpolable: true,
       keywords: ["thin", "medium", "thick"],
       typedom_types: ["Length"],
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
index 8af5ec46..f9db435 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
@@ -842,6 +842,27 @@
   }
 }
 
+float StyleBuilderConverter::ConvertBorderWidth(StyleResolverState& state,
+                                                const CSSValue& value) {
+  if (value.IsIdentifierValue()) {
+    CSSValueID value_id = ToCSSIdentifierValue(value).GetValueID();
+    if (value_id == CSSValueThin)
+      return 1;
+    if (value_id == CSSValueMedium)
+      return 3;
+    if (value_id == CSSValueThick)
+      return 5;
+    NOTREACHED();
+    return 0;
+  }
+  const CSSPrimitiveValue& primitive_value = ToCSSPrimitiveValue(value);
+  double result =
+      primitive_value.ComputeLength<double>(state.CssToLengthConversionData());
+  return clampTo<float>(RoundForImpreciseConversion<float>(result),
+                        defaultMinimumForClamp<float>(),
+                        defaultMaximumForClamp<float>());
+}
+
 Length StyleBuilderConverter::ConvertLength(const StyleResolverState& state,
                                             const CSSValue& value) {
   return ToCSSPrimitiveValue(value).ConvertToLength(
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.h b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.h
index 673e0ff..79118270 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.h
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.h
@@ -128,6 +128,7 @@
                                                         const CSSValue&);
   template <typename T>
   static T ConvertLineWidth(StyleResolverState&, const CSSValue&);
+  static float ConvertBorderWidth(StyleResolverState&, const CSSValue&);
   static Length ConvertLength(const StyleResolverState&, const CSSValue&);
   static UnzoomedLength ConvertUnzoomedLength(const StyleResolverState&,
                                               const CSSValue&);
diff --git a/third_party/WebKit/Source/core/dom/ModuleScript.h b/third_party/WebKit/Source/core/dom/ModuleScript.h
index b45010d5..5f4a22c 100644
--- a/third_party/WebKit/Source/core/dom/ModuleScript.h
+++ b/third_party/WebKit/Source/core/dom/ModuleScript.h
@@ -137,14 +137,18 @@
   // https://html.spec.whatwg.org/multipage/webappapis.html#concept-module-script-pre-instantiation-error
   //
   // |record_| and |preinstantiation_error_| are TraceWrappers()ed and kept
-  // alive via the path of
-  // DOMWindow -> Modulator/ModulatorImpl -> ModuleMap -> ModuleMap::Entry
-  // -> ModuleScript, or
-  // Modulator/ModulatorImpl -> ModuleTreeLinkerRegistry -> ModuleTreeLinker
-  // -> ModuleScript, or
-  // ScriptLoader -> PendingScript -> ModulePendingScript ->
-  // ModulePendingScriptTreeClient -> ModuleScript.
-  // All the classes/references on the path above should be
+  // alive via one or more of following reference graphs:
+  // * non-inline module script case
+  //   DOMWindow -> Modulator/ModulatorImpl -> ModuleMap -> ModuleMap::Entry
+  //   -> ModuleScript
+  // * inline module script case, before the PendingScript is created.
+  //   DOMWindow -> Modulator/ModulatorImpl -> ModuleTreeLinkerRegistry
+  //   -> ModuleTreeLinker -> ModuleScript
+  // * inline module script case, after the PendingScript is created.
+  //   HTMLScriptElement -> ScriptLoader -> PendingScript -> ModulePendingScript
+  //   -> ModulePendingScriptTreeClient -> ModuleScript.
+  //
+  // All the classes/references on the graphs above should be
   // TraceWrapperBase/TraceWrapperMember<>/etc.,
   TraceWrapperV8Reference<v8::Value> preinstantiation_error_;
 
diff --git a/third_party/WebKit/Source/core/editing/VisiblePosition.cpp b/third_party/WebKit/Source/core/editing/VisiblePosition.cpp
index e119c14..261b75c 100644
--- a/third_party/WebKit/Source/core/editing/VisiblePosition.cpp
+++ b/third_party/WebKit/Source/core/editing/VisiblePosition.cpp
@@ -116,9 +116,9 @@
 
 template <typename Strategy>
 VisiblePositionTemplate<Strategy>
-VisiblePositionTemplate<Strategy>::FirstPositionInNode(Node* node) {
+VisiblePositionTemplate<Strategy>::FirstPositionInNode(const Node& node) {
   return Create(PositionWithAffinityTemplate<Strategy>(
-      PositionTemplate<Strategy>::FirstPositionInNode(*node)));
+      PositionTemplate<Strategy>::FirstPositionInNode(node)));
 }
 
 template <typename Strategy>
diff --git a/third_party/WebKit/Source/core/editing/VisiblePosition.h b/third_party/WebKit/Source/core/editing/VisiblePosition.h
index a98122b..0e0f39b2 100644
--- a/third_party/WebKit/Source/core/editing/VisiblePosition.h
+++ b/third_party/WebKit/Source/core/editing/VisiblePosition.h
@@ -106,7 +106,7 @@
 
   static VisiblePositionTemplate<Strategy> AfterNode(const Node&);
   static VisiblePositionTemplate<Strategy> BeforeNode(const Node&);
-  static VisiblePositionTemplate<Strategy> FirstPositionInNode(Node*);
+  static VisiblePositionTemplate<Strategy> FirstPositionInNode(const Node&);
   static VisiblePositionTemplate<Strategy> InParentAfterNode(const Node&);
   static VisiblePositionTemplate<Strategy> InParentBeforeNode(const Node&);
   static VisiblePositionTemplate<Strategy> LastPositionInNode(Node*);
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
index 868deaa..13798f3 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -549,7 +549,7 @@
       position.ComputeContainerNode()
           ? EnclosingBlock(position.ComputeContainerNode(), rule)
           : 0;
-  return start_block ? VisiblePosition::FirstPositionInNode(start_block)
+  return start_block ? VisiblePosition::FirstPositionInNode(*start_block)
                      : VisiblePosition();
 }
 
@@ -643,7 +643,7 @@
   if (!highest_root)
     return VisiblePosition();
 
-  return VisiblePosition::FirstPositionInNode(highest_root);
+  return VisiblePosition::FirstPositionInNode(*highest_root);
 }
 
 VisiblePosition EndOfEditableContent(const VisiblePosition& visible_position) {
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnitsLine.cpp b/third_party/WebKit/Source/core/editing/VisibleUnitsLine.cpp
index 37ed8d25..659e3da 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnitsLine.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnitsLine.cpp
@@ -686,7 +686,7 @@
                               : node->GetDocument().documentElement();
   if (!root_element)
     return VisiblePosition();
-  return VisiblePosition::FirstPositionInNode(root_element);
+  return VisiblePosition::FirstPositionInNode(*root_element);
 }
 
 VisiblePosition NextLinePosition(const VisiblePosition& visible_position,
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
index 56ff069..ebc743c 100644
--- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
@@ -1052,10 +1052,11 @@
   if (visible_paragraph_end.IsNull())
     return nullptr;
 
-  HTMLElement* new_block =
+  HTMLElement* const new_block =
       InsertNewDefaultParagraphElementAt(upstream_start, editing_state);
   if (editing_state->IsAborted())
     return nullptr;
+  DCHECK(new_block);
 
   bool end_was_br =
       isHTMLBRElement(*visible_paragraph_end.DeepEquivalent().AnchorNode());
@@ -1067,7 +1068,7 @@
   visible_paragraph_start = StartOfParagraph(visible_pos);
   visible_paragraph_end = EndOfParagraph(visible_pos);
   MoveParagraphs(visible_paragraph_start, visible_paragraph_end,
-                 VisiblePosition::FirstPositionInNode(new_block),
+                 VisiblePosition::FirstPositionInNode(*new_block),
                  editing_state);
   if (editing_state->IsAborted())
     return nullptr;
@@ -1798,7 +1799,7 @@
   // wrong paragraph.
   if (enclosing_anchor && !IsEnclosingBlock(enclosing_anchor)) {
     VisiblePosition first_in_anchor =
-        VisiblePosition::FirstPositionInNode(enclosing_anchor);
+        VisiblePosition::FirstPositionInNode(*enclosing_anchor);
     VisiblePosition last_in_anchor =
         VisiblePosition::LastPositionInNode(enclosing_anchor);
     // If visually just after the anchor, insert *inside* the anchor unless it's
@@ -1882,7 +1883,7 @@
 
     // Do not split a node when doing so introduces an empty node.
     VisiblePosition position_in_parent =
-        VisiblePosition::FirstPositionInNode(parent_element);
+        VisiblePosition::FirstPositionInNode(*parent_element);
     VisiblePosition position_in_node =
         CreateVisiblePosition(FirstPositionInOrBeforeNode(node));
     if (position_in_parent.DeepEquivalent() !=
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
index c3d742ef..55616970 100644
--- a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
@@ -47,8 +47,9 @@
 using namespace HTMLNames;
 
 static bool IsTableCellEmpty(Node* cell) {
+  DCHECK(cell);
   DCHECK(IsTableCell(cell)) << cell;
-  return VisiblePosition::FirstPositionInNode(cell).DeepEquivalent() ==
+  return VisiblePosition::FirstPositionInNode(*cell).DeepEquivalent() ==
          VisiblePosition::LastPositionInNode(cell).DeepEquivalent();
 }
 
@@ -513,7 +514,7 @@
   GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
   if (node == start_block_) {
     VisiblePosition previous = PreviousPositionOf(
-        VisiblePosition::FirstPositionInNode(start_block_.Get()));
+        VisiblePosition::FirstPositionInNode(*start_block_.Get()));
     if (previous.IsNotNull() && !IsEndOfBlock(previous))
       need_placeholder_ = true;
   }
diff --git a/third_party/WebKit/Source/core/editing/commands/DocumentExecCommand.cpp b/third_party/WebKit/Source/core/editing/commands/DocumentExecCommand.cpp
index bd98b83..b38744d 100644
--- a/third_party/WebKit/Source/core/editing/commands/DocumentExecCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/DocumentExecCommand.cpp
@@ -31,6 +31,7 @@
 
 #include "core/editing/Editor.h"
 #include "core/events/ScopedEventQueue.h"
+#include "core/frame/UseCounter.h"
 #include "core/html/TextControlElement.h"
 #include "core/inspector/ConsoleMessage.h"
 #include "platform/Histogram.h"
diff --git a/third_party/WebKit/Source/core/editing/commands/IndentOutdentCommand.cpp b/third_party/WebKit/Source/core/editing/commands/IndentOutdentCommand.cpp
index 7bd2a581..dda0386 100644
--- a/third_party/WebKit/Source/core/editing/commands/IndentOutdentCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/IndentOutdentCommand.cpp
@@ -227,7 +227,7 @@
 
   // The selection is inside a blockquote i.e. enclosingNode is a blockquote
   VisiblePosition position_in_enclosing_block =
-      VisiblePosition::FirstPositionInNode(enclosing_element);
+      VisiblePosition::FirstPositionInNode(*enclosing_element);
   // If the blockquote is inline, the start of the enclosing block coincides
   // with positionInEnclosingBlock.
   VisiblePosition start_of_enclosing_block =
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
index b3a5d0f..5d6f8c8 100644
--- a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
@@ -384,7 +384,7 @@
 
       GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
       Node* first_child_in_list =
-          EnclosingListChild(VisiblePosition::FirstPositionInNode(list_element)
+          EnclosingListChild(VisiblePosition::FirstPositionInNode(*list_element)
                                  .DeepEquivalent()
                                  .AnchorNode(),
                              list_element);
@@ -394,7 +394,7 @@
               : list_element;
 
       MoveParagraphWithClones(
-          VisiblePosition::FirstPositionInNode(list_element),
+          VisiblePosition::FirstPositionInNode(*list_element),
           VisiblePosition::LastPositionInNode(list_element), new_list,
           outer_block, editing_state);
       if (editing_state->IsAborted())
@@ -460,7 +460,7 @@
   VisiblePosition end;
   DCHECK(list_child_node);
   if (isHTMLLIElement(*list_child_node)) {
-    start = VisiblePosition::FirstPositionInNode(list_child_node);
+    start = VisiblePosition::FirstPositionInNode(*list_child_node);
     end = VisiblePosition::LastPositionInNode(list_child_node);
     next_list_child = list_child_node->nextSibling();
     previous_list_child = list_child_node->previousSibling();
diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
index 7a6123b9..a28357e8 100644
--- a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
@@ -630,9 +630,9 @@
     // FIXME: Tolerate differences in id, class, and style attributes.
     if (element->parentNode() && IsNonTableCellHTMLBlockElement(element) &&
         AreIdenticalElements(*element, *element->parentNode()) &&
-        VisiblePosition::FirstPositionInNode(element->parentNode())
+        VisiblePosition::FirstPositionInNode(*element->parentNode())
                 .DeepEquivalent() ==
-            VisiblePosition::FirstPositionInNode(element).DeepEquivalent() &&
+            VisiblePosition::FirstPositionInNode(*element).DeepEquivalent() &&
         VisiblePosition::LastPositionInNode(element->parentNode())
                 .DeepEquivalent() ==
             VisiblePosition::LastPositionInNode(element).DeepEquivalent()) {
diff --git a/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp b/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp
index 3dbbedfd..46e23a95 100644
--- a/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp
@@ -769,7 +769,7 @@
       if (enclosing_table_cell &&
           visible_start.DeepEquivalent() ==
               VisiblePosition::FirstPositionInNode(
-                  const_cast<Node*>(enclosing_table_cell))
+                  *const_cast<Node*>(enclosing_table_cell))
                   .DeepEquivalent())
         return;
 
diff --git a/third_party/WebKit/Source/core/events/EventTarget.h b/third_party/WebKit/Source/core/events/EventTarget.h
index 54f46ff..58a2819 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.h
+++ b/third_party/WebKit/Source/core/events/EventTarget.h
@@ -40,7 +40,6 @@
 #include "core/events/AddEventListenerOptionsResolved.h"
 #include "core/events/EventDispatchResult.h"
 #include "core/events/EventListenerMap.h"
-#include "core/frame/UseCounter.h"
 #include "platform/bindings/ScriptWrappable.h"
 #include "platform/heap/Handle.h"
 #include "platform/wtf/Allocator.h"
@@ -57,6 +56,7 @@
 class MessagePort;
 class Node;
 class ServiceWorker;
+enum class WebFeature : uint32_t;
 
 struct FiringEventIterator {
   DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
diff --git a/third_party/WebKit/Source/core/events/TouchEvent.cpp b/third_party/WebKit/Source/core/events/TouchEvent.cpp
index e89b7c2..61cdefe 100644
--- a/third_party/WebKit/Source/core/events/TouchEvent.cpp
+++ b/third_party/WebKit/Source/core/events/TouchEvent.cpp
@@ -30,6 +30,7 @@
 #include "core/frame/FrameConsole.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/LocalFrameView.h"
+#include "core/frame/UseCounter.h"
 #include "core/html/HTMLElement.h"
 #include "core/input/InputDeviceCapabilities.h"
 #include "core/inspector/ConsoleMessage.h"
diff --git a/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp b/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp
index 6731b48a..38e7bb2 100644
--- a/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp
+++ b/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp
@@ -58,10 +58,8 @@
 class SubresourceIntegrityTest : public ::testing::Test {
  public:
   SubresourceIntegrityTest()
-      : secure_url(kParsedURLString, "https://example.test:443"),
-        insecure_url(kParsedURLString, "http://example.test:80"),
-        secure_origin(SecurityOrigin::Create(secure_url)),
-        insecure_origin(SecurityOrigin::Create(insecure_url)) {}
+      : sec_url(kParsedURLString, "https://example.test:443"),
+        insec_url(kParsedURLString, "http://example.test:80") {}
 
  protected:
   virtual void SetUp() {
@@ -168,54 +166,76 @@
     EXPECT_EQ(0u, metadata_set.size());
   }
 
-  enum CorsStatus { kWithCors, kNoCors };
+  enum ServiceWorkerMode {
+    kNoServiceWorker,
+    kSWOpaqueResponse,
+    kSWClearResponse
+  };
 
-  void ExpectIntegrity(const char* integrity,
-                       const char* script,
-                       size_t size,
-                       const KURL& url,
-                       const KURL& requestor_url,
-                       CorsStatus cors_status = kWithCors) {
-    script_element->setAttribute(HTMLNames::integrityAttr, integrity);
-    EXPECT_TRUE(SubresourceIntegrity::CheckSubresourceIntegrity(
-        String(integrity), script_element->GetDocument(), script, size, url,
-        *CreateTestResource(url, requestor_url, cors_status)));
+  enum Expectation { kIntegritySuccess, kIntegrityFailure };
+
+  struct TestCase {
+    const KURL& origin;
+    const KURL& target;
+    const KURL* allow_origin_url;
+    const ServiceWorkerMode service_worker;
+    const Expectation expectation;
+  };
+
+  void CheckExpectedIntegrity(const char* integrity, const TestCase test) {
+    CheckExpectedIntegrity(integrity, test, test.expectation);
   }
 
-  void ExpectIntegrityFailure(const char* integrity,
-                              const char* script,
-                              size_t size,
-                              const KURL& url,
-                              const KURL& requestor_url,
-                              CorsStatus cors_status = kWithCors) {
+  // Allows to overwrite the test expectation for cases that are always expected
+  // to fail:
+  void CheckExpectedIntegrity(const char* integrity,
+                              const TestCase test,
+                              Expectation expectation) {
+    document->UpdateSecurityOrigin(SecurityOrigin::Create(test.origin));
     script_element->setAttribute(HTMLNames::integrityAttr, integrity);
-    EXPECT_FALSE(SubresourceIntegrity::CheckSubresourceIntegrity(
-        String(integrity), script_element->GetDocument(), script, size, url,
-        *CreateTestResource(url, requestor_url, cors_status)));
+
+    EXPECT_EQ(expectation == kIntegritySuccess,
+              SubresourceIntegrity::CheckSubresourceIntegrity(
+                  String(integrity), script_element->GetDocument(),
+                  kBasicScript, strlen(kBasicScript), test.target,
+                  *CreateTestResource(test.target, test.allow_origin_url,
+                                      test.service_worker)));
   }
 
   Resource* CreateTestResource(const KURL& url,
-                               const KURL& allow_origin_url,
-                               CorsStatus cors_status) {
+                               const KURL* allow_origin_url,
+                               ServiceWorkerMode service_worker_mode) {
     ResourceResponse response;
     response.SetURL(url);
     response.SetHTTPStatusCode(200);
-    if (cors_status == kWithCors) {
+
+    if (allow_origin_url) {
       response.SetHTTPHeaderField(
           "access-control-allow-origin",
-          SecurityOrigin::Create(allow_origin_url)->ToAtomicString());
+          SecurityOrigin::Create(*allow_origin_url)->ToAtomicString());
       response.SetHTTPHeaderField("access-control-allow-credentials", "true");
     }
+
+    if (service_worker_mode != kNoServiceWorker) {
+      response.SetWasFetchedViaServiceWorker(true);
+
+      if (service_worker_mode == kSWOpaqueResponse) {
+        response.SetServiceWorkerResponseType(
+            WebServiceWorkerResponseType::kWebServiceWorkerResponseTypeOpaque);
+      } else {
+        response.SetServiceWorkerResponseType(
+            WebServiceWorkerResponseType::kWebServiceWorkerResponseTypeDefault);
+      }
+    }
+
     Resource* resource =
         RawResource::CreateForTest(response.Url(), Resource::kRaw);
     resource->SetResponse(response);
     return resource;
   }
 
-  KURL secure_url;
-  KURL insecure_url;
-  RefPtr<SecurityOrigin> secure_origin;
-  RefPtr<SecurityOrigin> insecure_origin;
+  KURL sec_url;
+  KURL insec_url;
 
   Persistent<Document> document;
   Persistent<HTMLScriptElement> script_element;
@@ -450,87 +470,89 @@
       kHashAlgorithmSha384);
 }
 
-//
-// End-to-end tests of ::CheckSubresourceIntegrity.
-//
+// Tests that SubresourceIntegrity::CheckSubresourceIntegrity behaves correctly
+// when faced with secure or insecure origins, same origin and cross origin
+// requests, successful and failing CORS checks as well as when the response was
+// handled by a service worker.
+TEST_F(SubresourceIntegrityTest, OriginIntegrity) {
+  TestCase cases[] = {
+      // Secure origin, same origin -> integrity expected:
+      {sec_url, sec_url, nullptr, kNoServiceWorker, kIntegritySuccess},
+      {sec_url, sec_url, nullptr, kSWClearResponse, kIntegritySuccess},
 
-TEST_F(SubresourceIntegrityTest, CheckSubresourceIntegrityInSecureOrigin) {
-  document->UpdateSecurityOrigin(secure_origin->IsolatedCopy());
+      // Insecure origin, secure target, CORS ok -> integrity expected:
+      {insec_url, sec_url, &insec_url, kNoServiceWorker, kIntegritySuccess},
+      {insec_url, sec_url, &insec_url, kSWClearResponse, kIntegritySuccess},
+      {insec_url, sec_url, nullptr, kSWClearResponse, kIntegritySuccess},
 
-  // Verify basic sha256, sha384, and sha512 integrity checks.
-  ExpectIntegrity(kSha256Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, secure_url);
-  ExpectIntegrity(kSha256IntegrityLenientSyntax, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url);
-  ExpectIntegrity(kSha384Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, secure_url);
-  ExpectIntegrity(kSha512Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, secure_url);
+      // Secure origin, insecure target, CORS ok -> no failure expected:
+      {sec_url, insec_url, &sec_url, kNoServiceWorker, kIntegritySuccess},
+      {sec_url, insec_url, &sec_url, kSWClearResponse, kIntegritySuccess},
+      {sec_url, insec_url, nullptr, kSWClearResponse, kIntegritySuccess},
 
-  // Verify multiple hashes in an attribute.
-  ExpectIntegrity(kSha256AndSha384Integrities, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url);
-  ExpectIntegrity(kBadSha256AndGoodSha384Integrities, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url);
+      // Insecure origin, secure target, no CORS headers -> failure expected:
+      {insec_url, sec_url, nullptr, kNoServiceWorker, kIntegrityFailure},
 
-  // The hash label must match the hash value.
-  ExpectIntegrityFailure(kSha384IntegrityLabeledAs256, kBasicScript,
-                         strlen(kBasicScript), secure_url, secure_url);
+      // Insecure origin, secure target, CORS failure -> failure expected:
+      {insec_url, sec_url, &sec_url, kNoServiceWorker, kIntegrityFailure},
+      {insec_url, sec_url, &sec_url, kSWOpaqueResponse, kIntegrityFailure},
+      {insec_url, sec_url, nullptr, kSWOpaqueResponse, kIntegrityFailure},
 
-  // With multiple values, at least one must match, and it must be the
-  // strongest hash algorithm.
-  ExpectIntegrityFailure(kGoodSha256AndBadSha384Integrities, kBasicScript,
-                         strlen(kBasicScript), secure_url, secure_url);
-  ExpectIntegrityFailure(kBadSha256AndBadSha384Integrities, kBasicScript,
-                         strlen(kBasicScript), secure_url, secure_url);
+      // Secure origin, same origin, opaque response from service worker ->
+      // failure expected:
+      {sec_url, sec_url, &sec_url, kSWOpaqueResponse, kIntegrityFailure},
 
-  // Unsupported hash functions should succeed.
-  ExpectIntegrity(kUnsupportedHashFunctionIntegrity, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url);
+      // Insecure origin, insecure target, same origin-> failure expected:
+      {sec_url, insec_url, nullptr, kNoServiceWorker, kIntegrityFailure},
+  };
 
-  // All parameters are fine, and because this is not cross origin, CORS is
-  // not needed.
-  ExpectIntegrity(kSha256Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, secure_url, kNoCors);
+  for (const auto& test : cases) {
+    SCOPED_TRACE(
+        ::testing::Message()
+        << "Origin: " << test.origin.BaseAsString()
+        << ", target: " << test.target.BaseAsString()
+        << ", CORS access-control-allow-origin header: "
+        << (test.allow_origin_url ? test.allow_origin_url->BaseAsString() : "-")
+        << ", service worker: "
+        << (test.service_worker == kNoServiceWorker
+                ? "no"
+                : (test.service_worker == kSWClearResponse ? "clear response"
+                                                           : "opaque response"))
+        << ", expected result: "
+        << (test.expectation == kIntegritySuccess ? "integrity" : "failure"));
 
-  // Options should be ignored
-  ExpectIntegrity(kSha256IntegrityWithEmptyOption, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url, kNoCors);
-  ExpectIntegrity(kSha256IntegrityWithOption, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url, kNoCors);
-  ExpectIntegrity(kSha256IntegrityWithOptions, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url, kNoCors);
-  ExpectIntegrity(kSha256IntegrityWithMimeOption, kBasicScript,
-                  strlen(kBasicScript), secure_url, secure_url, kNoCors);
-}
+    // Verify basic sha256, sha384, and sha512 integrity checks.
+    CheckExpectedIntegrity(kSha256Integrity, test);
+    CheckExpectedIntegrity(kSha256IntegrityLenientSyntax, test);
+    CheckExpectedIntegrity(kSha384Integrity, test);
+    CheckExpectedIntegrity(kSha512Integrity, test);
 
-TEST_F(SubresourceIntegrityTest, CheckSubresourceIntegrityInInsecureOrigin) {
-  // The same checks as CheckSubresourceIntegrityInSecureOrigin should pass
-  // here, with the expection of the NoCors check at the end.
-  document->UpdateSecurityOrigin(insecure_origin->IsolatedCopy());
+    // Verify multiple hashes in an attribute.
+    CheckExpectedIntegrity(kSha256AndSha384Integrities, test);
+    CheckExpectedIntegrity(kBadSha256AndGoodSha384Integrities, test);
 
-  ExpectIntegrity(kSha256Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, insecure_url);
-  ExpectIntegrity(kSha256IntegrityLenientSyntax, kBasicScript,
-                  strlen(kBasicScript), secure_url, insecure_url);
-  ExpectIntegrity(kSha384Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, insecure_url);
-  ExpectIntegrity(kSha512Integrity, kBasicScript, strlen(kBasicScript),
-                  secure_url, insecure_url);
-  ExpectIntegrityFailure(kSha384IntegrityLabeledAs256, kBasicScript,
-                         strlen(kBasicScript), secure_url, insecure_url);
-  ExpectIntegrity(kUnsupportedHashFunctionIntegrity, kBasicScript,
-                  strlen(kBasicScript), secure_url, insecure_url);
+    // Unsupported hash functions should succeed.
+    CheckExpectedIntegrity(kUnsupportedHashFunctionIntegrity, test);
 
-  ExpectIntegrity(kSha256AndSha384Integrities, kBasicScript,
-                  strlen(kBasicScript), secure_url, insecure_url);
-  ExpectIntegrity(kBadSha256AndGoodSha384Integrities, kBasicScript,
-                  strlen(kBasicScript), secure_url, insecure_url);
+    // Options should be ignored
+    CheckExpectedIntegrity(kSha256IntegrityWithEmptyOption, test);
+    CheckExpectedIntegrity(kSha256IntegrityWithOption, test);
+    CheckExpectedIntegrity(kSha256IntegrityWithOptions, test);
+    CheckExpectedIntegrity(kSha256IntegrityWithMimeOption, test);
 
-  ExpectIntegrityFailure(kSha256Integrity, kBasicScript, strlen(kBasicScript),
-                         secure_url, insecure_url, kNoCors);
-  ExpectIntegrityFailure(kGoodSha256AndBadSha384Integrities, kBasicScript,
-                         strlen(kBasicScript), secure_url, insecure_url);
+    // The following tests are expected to fail in every scenario:
+
+    // The hash label must match the hash value.
+    CheckExpectedIntegrity(kSha384IntegrityLabeledAs256, test,
+                           Expectation::kIntegrityFailure);
+
+    // With multiple values, at least one must match, and it must be the
+    // strongest hash algorithm.
+    CheckExpectedIntegrity(kGoodSha256AndBadSha384Integrities, test,
+                           Expectation::kIntegrityFailure);
+    CheckExpectedIntegrity(kBadSha256AndBadSha384Integrities, test,
+                           Expectation::kIntegrityFailure);
+  }
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLOListElement.cpp b/third_party/WebKit/Source/core/html/HTMLOListElement.cpp
index abf84ba2..dc124684 100644
--- a/third_party/WebKit/Source/core/html/HTMLOListElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLOListElement.cpp
@@ -25,6 +25,7 @@
 #include "core/CSSPropertyNames.h"
 #include "core/CSSValueKeywords.h"
 #include "core/HTMLNames.h"
+#include "core/frame/UseCounter.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "core/layout/LayoutListItem.h"
 
diff --git a/third_party/WebKit/Source/core/html/HTMLTableCellElement.cpp b/third_party/WebKit/Source/core/html/HTMLTableCellElement.cpp
index 89a91e53..1de7d39 100644
--- a/third_party/WebKit/Source/core/html/HTMLTableCellElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLTableCellElement.cpp
@@ -29,6 +29,7 @@
 #include "core/HTMLNames.h"
 #include "core/dom/Attribute.h"
 #include "core/dom/ElementTraversal.h"
+#include "core/frame/UseCounter.h"
 #include "core/html/HTMLTableElement.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "core/layout/LayoutTableCell.h"
diff --git a/third_party/WebKit/Source/core/html/TextControlElement.cpp b/third_party/WebKit/Source/core/html/TextControlElement.cpp
index d05dac2d..284c411 100644
--- a/third_party/WebKit/Source/core/html/TextControlElement.cpp
+++ b/third_party/WebKit/Source/core/html/TextControlElement.cpp
@@ -459,7 +459,7 @@
 
 VisiblePosition TextControlElement::VisiblePositionForIndex(int index) const {
   if (index <= 0)
-    return VisiblePosition::FirstPositionInNode(InnerEditorElement());
+    return VisiblePosition::FirstPositionInNode(*InnerEditorElement());
   Position start, end;
   bool selected = Range::selectNodeContents(InnerEditorElement(), start, end);
   if (!selected)
diff --git a/third_party/WebKit/Source/core/html/TextDocument.cpp b/third_party/WebKit/Source/core/html/TextDocument.cpp
index 4be2ce8..2359ac7 100644
--- a/third_party/WebKit/Source/core/html/TextDocument.cpp
+++ b/third_party/WebKit/Source/core/html/TextDocument.cpp
@@ -24,6 +24,7 @@
 
 #include "core/html/TextDocument.h"
 
+#include "core/frame/UseCounter.h"
 #include "core/html/parser/TextDocumentParser.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp
index 049278a9..e3f0bc5d 100644
--- a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp
@@ -5,6 +5,7 @@
 #include "core/html/canvas/ImageElementBase.h"
 
 #include "core/frame/LocalDOMWindow.h"
+#include "core/frame/UseCounter.h"
 #include "core/imagebitmap/ImageBitmap.h"
 #include "core/layout/LayoutObject.h"
 #include "core/loader/ImageLoader.h"
diff --git a/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp b/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
index 1348968c..c3fb7f9 100644
--- a/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
+++ b/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
@@ -33,6 +33,7 @@
 #include "core/dom/Document.h"
 #include "core/frame/LocalFrame.h"
 #include "core/frame/Settings.h"
+#include "core/frame/UseCounter.h"
 #include "core/html/HTMLParamElement.h"
 #include "core/html/LinkRelAttribute.h"
 #include "core/html/parser/HTMLDocumentParser.h"
diff --git a/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.cpp b/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.cpp
index 60960ebb..3d7a8e1 100644
--- a/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.cpp
+++ b/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.cpp
@@ -28,6 +28,7 @@
 #include "core/dom/Document.h"
 #include "core/frame/LocalFrame.h"
 #include "core/frame/LocalFrameClient.h"
+#include "core/frame/UseCounter.h"
 #include "core/inspector/ConsoleMessage.h"
 #include "core/loader/DocumentLoader.h"
 #include "core/loader/FrameLoader.h"
diff --git a/third_party/WebKit/Source/core/layout/CollapsedBorderValue.h b/third_party/WebKit/Source/core/layout/CollapsedBorderValue.h
index e12541e..62d02ca 100644
--- a/third_party/WebKit/Source/core/layout/CollapsedBorderValue.h
+++ b/third_party/WebKit/Source/core/layout/CollapsedBorderValue.h
@@ -56,11 +56,16 @@
                        const Color& color,
                        EBorderPrecedence precedence)
       : color_(color),
-        width_(ComputedStyle::BorderStyleIsVisible(border.Style())
-                   ? border.Width()
-                   : 0),
         style_(static_cast<unsigned>(border.Style())),
         precedence_(precedence) {
+    if (!ComputedStyle::BorderStyleIsVisible(border.Style())) {
+      width_ = 0;
+    } else {
+      if (border.Width() > 0.0f && border.Width() <= 1.0f)
+        width_ = 1;
+      else
+        width_ = border.Width();
+    }
     DCHECK(precedence != kBorderPrecedenceOff);
   }
 
@@ -69,9 +74,16 @@
                        const Color& color,
                        EBorderPrecedence precedence)
       : color_(color),
-        width_(ComputedStyle::BorderStyleIsVisible(style) ? width : 0),
         style_(static_cast<unsigned>(style)),
         precedence_(precedence) {
+    if (!ComputedStyle::BorderStyleIsVisible(style)) {
+      width_ = 0;
+    } else {
+      if (width > 0.0f && width <= 1.0f)
+        width_ = 1;
+      else
+        width_ = width;
+    }
     DCHECK(precedence != kBorderPrecedenceOff);
   }
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
index 8a1142c..fbfb2c8 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -28,6 +28,7 @@
 
 #include <algorithm>
 #include <limits>
+#include "core/frame/UseCounter.h"
 #include "core/layout/HitTestResult.h"
 #include "core/layout/LayoutAnalyzer.h"
 #include "core/layout/LayoutTableCell.h"
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
index 234af1f..520fce8 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
@@ -6,6 +6,7 @@
 
 #include "core/dom/Document.h"
 #include "core/frame/LocalFrameView.h"
+#include "core/frame/UseCounter.h"
 #include "core/layout/LayoutBlock.h"
 #include "core/layout/LayoutView.h"
 #include "core/layout/compositing/CompositedLayerMapping.h"
diff --git a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
index 13952d5..d3625eae 100644
--- a/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp
@@ -277,12 +277,20 @@
                            -edges[kBSLeft].GetDoubleBorderStripeWidth(stripe));
 }
 
+float ClampOrRound(float border_width) {
+  // Make sure non-zero borders never disappear
+  if (border_width > 0.0f && border_width <= 1.0f)
+    return 1.0f;
+
+  return roundf(border_width);
+}
+
 void DrawSolidBorderRect(GraphicsContext& context,
                          const FloatRect& border_rect,
                          float border_width,
                          const Color& color) {
   FloatRect stroke_rect(border_rect);
-  border_width = roundf(border_width);
+  border_width = ClampOrRound(border_width);
   stroke_rect.Inflate(-border_width / 2);
 
   bool was_antialias = context.ShouldAntialias();
@@ -807,7 +815,7 @@
       if (use_path)
         path = &border_info.rounded_border_path;
       else
-        side_rect.SetHeight(roundf(edge.Width()));
+        side_rect.SetHeight(ClampOrRound(edge.Width()));
 
       PaintOneBorderSide(context, side_rect, kBSTop, kBSLeft, kBSRight, path,
                          border_info.anti_alias, color, completed_edges);
@@ -821,7 +829,7 @@
       if (use_path)
         path = &border_info.rounded_border_path;
       else
-        side_rect.ShiftYEdgeTo(side_rect.MaxY() - roundf(edge.Width()));
+        side_rect.ShiftYEdgeTo(side_rect.MaxY() - ClampOrRound(edge.Width()));
 
       PaintOneBorderSide(context, side_rect, kBSBottom, kBSLeft, kBSRight, path,
                          border_info.anti_alias, color, completed_edges);
@@ -835,7 +843,7 @@
       if (use_path)
         path = &border_info.rounded_border_path;
       else
-        side_rect.SetWidth(roundf(edge.Width()));
+        side_rect.SetWidth(ClampOrRound(edge.Width()));
 
       PaintOneBorderSide(context, side_rect, kBSLeft, kBSTop, kBSBottom, path,
                          border_info.anti_alias, color, completed_edges);
@@ -849,7 +857,7 @@
       if (use_path)
         path = &border_info.rounded_border_path;
       else
-        side_rect.ShiftXEdgeTo(side_rect.MaxX() - roundf(edge.Width()));
+        side_rect.ShiftXEdgeTo(side_rect.MaxX() - ClampOrRound(edge.Width()));
 
       PaintOneBorderSide(context, side_rect, kBSRight, kBSTop, kBSBottom, path,
                          border_info.anti_alias, color, completed_edges);
@@ -960,8 +968,9 @@
     ObjectPainter::DrawLineForBoxSide(
         graphics_context, side_rect.X(), side_rect.Y(), side_rect.MaxX(),
         side_rect.MaxY(), side, color, edge_to_render.BorderStyle(),
-        miter1 != kNoMiter ? roundf(adjacent_edge1.Width()) : 0,
-        miter2 != kNoMiter ? roundf(adjacent_edge2.Width()) : 0, antialias);
+        miter1 != kNoMiter ? ClampOrRound(adjacent_edge1.Width()) : 0,
+        miter2 != kNoMiter ? ClampOrRound(adjacent_edge2.Width()) : 0,
+        antialias);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
index 9a1ea04..8e9533b6 100644
--- a/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGTextContentElement.cpp
@@ -215,7 +215,7 @@
 
   // Find selection start
   VisiblePosition start = VisiblePosition::FirstPositionInNode(
-      const_cast<SVGTextContentElement*>(this));
+      *const_cast<SVGTextContentElement*>(this));
   for (unsigned i = 0; i < charnum; ++i)
     start = NextPositionOf(start);
 
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
index 150a0de..8cb784b 100644
--- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
+++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -33,6 +33,7 @@
 #include "core/dom/TaskRunnerHelper.h"
 #include "core/events/Event.h"
 #include "core/events/EventListener.h"
+#include "core/frame/UseCounter.h"
 #include "core/svg/SVGSVGElement.h"
 #include "core/svg/SVGURIReference.h"
 #include "core/svg/animation/SMILTimeContainer.h"
diff --git a/third_party/WebKit/Source/modules/websockets/BUILD.gn b/third_party/WebKit/Source/modules/websockets/BUILD.gn
index 47610a9..f26f634a 100644
--- a/third_party/WebKit/Source/modules/websockets/BUILD.gn
+++ b/third_party/WebKit/Source/modules/websockets/BUILD.gn
@@ -14,7 +14,6 @@
     "DocumentWebSocketChannel.h",
     "InspectorWebSocketEvents.cpp",
     "InspectorWebSocketEvents.h",
-    "WebPepperSocket.cpp",
     "WebPepperSocketChannelClientProxy.h",
     "WebPepperSocketImpl.cpp",
     "WebPepperSocketImpl.h",
diff --git a/third_party/WebKit/Source/modules/websockets/WebPepperSocket.cpp b/third_party/WebKit/Source/modules/websockets/WebPepperSocket.cpp
deleted file mode 100644
index 13339417..0000000
--- a/third_party/WebKit/Source/modules/websockets/WebPepperSocket.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "public/web/WebPepperSocket.h"
-
-#include <memory>
-#include "modules/websockets/WebPepperSocketImpl.h"
-#include "platform/wtf/PtrUtil.h"
-
-namespace blink {
-
-WebPepperSocket* WebPepperSocket::Create(const WebDocument& document,
-                                         WebPepperSocketClient* client) {
-  if (!client)
-    return 0;
-
-  std::unique_ptr<WebPepperSocketImpl> websocket =
-      WTF::MakeUnique<WebPepperSocketImpl>(document, client);
-  if (websocket && websocket->IsNull())
-    return 0;
-  return websocket.release();
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.cpp b/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.cpp
index 2c85006d3..8af12e97 100644
--- a/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.cpp
+++ b/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.cpp
@@ -38,6 +38,7 @@
 #include "modules/websockets/DocumentWebSocketChannel.h"
 #include "modules/websockets/WebPepperSocketChannelClientProxy.h"
 #include "modules/websockets/WebSocketChannel.h"
+#include "platform/wtf/PtrUtil.h"
 #include "platform/wtf/text/CString.h"
 #include "platform/wtf/text/WTFString.h"
 #include "public/platform/WebURL.h"
@@ -46,34 +47,31 @@
 
 namespace blink {
 
+std::unique_ptr<WebPepperSocket> WebPepperSocket::Create(
+    const WebDocument& document,
+    WebPepperSocketClient* client) {
+  DCHECK(client);
+
+  return WTF::MakeUnique<WebPepperSocketImpl>(document, client);
+}
+
 WebPepperSocketImpl::WebPepperSocketImpl(const WebDocument& document,
                                          WebPepperSocketClient* client)
     : client_(client),
       channel_proxy_(WebPepperSocketChannelClientProxy::Create(this)),
-      binary_type_(kBinaryTypeBlob),
       is_closing_or_closed_(false),
       buffered_amount_(0),
       buffered_amount_after_close_(0) {
   Document* core_document = document;
   private_ = DocumentWebSocketChannel::Create(
       core_document, channel_proxy_.Get(), SourceLocation::Capture());
+  DCHECK(private_);
 }
 
 WebPepperSocketImpl::~WebPepperSocketImpl() {
   private_->Disconnect();
 }
 
-WebPepperSocket::BinaryType WebPepperSocketImpl::GetBinaryType() const {
-  return binary_type_;
-}
-
-bool WebPepperSocketImpl::SetBinaryType(BinaryType binary_type) {
-  if (binary_type > kBinaryTypeArrayBuffer)
-    return false;
-  binary_type_ = binary_type;
-  return true;
-}
-
 void WebPepperSocketImpl::Connect(const WebURL& url,
                                   const WebString& protocol) {
   private_->Connect(url, protocol);
@@ -83,10 +81,6 @@
   return subprotocol_;
 }
 
-WebString WebPepperSocketImpl::Extensions() {
-  return extensions_;
-}
-
 bool WebPepperSocketImpl::SendText(const WebString& message) {
   String core_message = message;
   CString encoded_message = core_message.Utf8();
@@ -123,10 +117,6 @@
   return true;
 }
 
-unsigned long WebPepperSocketImpl::BufferedAmount() const {
-  return buffered_amount_;
-}
-
 void WebPepperSocketImpl::Close(int code, const WebString& reason) {
   is_closing_or_closed_ = true;
   private_->Close(code, reason);
@@ -148,7 +138,6 @@
 
   // FIXME: Deprecate these statements.
   subprotocol_ = subprotocol;
-  extensions_ = extensions;
   client_->DidConnect();
 }
 
@@ -158,15 +147,8 @@
 
 void WebPepperSocketImpl::DidReceiveBinaryMessage(
     std::unique_ptr<Vector<char>> payload) {
-  switch (binary_type_) {
-    case kBinaryTypeBlob:
-      // FIXME: Handle Blob after supporting WebBlob.
-      break;
-    case kBinaryTypeArrayBuffer:
-      client_->DidReceiveArrayBuffer(WebArrayBuffer(
-          DOMArrayBuffer::Create(payload->data(), payload->size())));
-      break;
-  }
+  client_->DidReceiveArrayBuffer(
+      WebArrayBuffer(DOMArrayBuffer::Create(payload->data(), payload->size())));
 }
 
 void WebPepperSocketImpl::DidError() {
diff --git a/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.h b/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.h
index 6446b45..1bf66f0 100644
--- a/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.h
+++ b/third_party/WebKit/Source/modules/websockets/WebPepperSocketImpl.h
@@ -52,16 +52,11 @@
   WebPepperSocketImpl(const WebDocument&, WebPepperSocketClient*);
   ~WebPepperSocketImpl() override;
 
-  bool IsNull() const { return !private_; }
-
-  BinaryType GetBinaryType() const override;
-  bool SetBinaryType(BinaryType) override;
+  // WebPepperSocket implementation.
   void Connect(const WebURL&, const WebString& protocol) override;
   WebString Subprotocol() override;
-  WebString Extensions() override;
   bool SendText(const WebString&) override;
   bool SendArrayBuffer(const WebArrayBuffer&) override;
-  unsigned long BufferedAmount() const override;
   void Close(int code, const WebString& reason) override;
   void Fail(const WebString& reason) override;
   void Disconnect() override;
@@ -82,9 +77,7 @@
   Persistent<WebSocketChannel> private_;
   WebPepperSocketClient* client_;
   Persistent<WebPepperSocketChannelClientProxy> channel_proxy_;
-  BinaryType binary_type_;
   WebString subprotocol_;
-  WebString extensions_;
   bool is_closing_or_closed_;
   // m_bufferedAmount includes m_bufferedAmountAfterClose.
   unsigned long buffered_amount_;
diff --git a/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp b/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
index e554812..db939766 100644
--- a/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/filters/SkiaImageFilterBuilder.cpp
@@ -132,10 +132,13 @@
     // can be serialized.
     SkBitmap bitmap;
     const SkRect mask_record_bounds = reflection.MaskBounds();
-    SkScalar mask_buffer_size = mask_record_bounds.width() * mask_record_bounds.height();
+    SkRect mask_bounds_rounded;
+    mask_record_bounds.roundOut(&mask_bounds_rounded);
+    SkScalar mask_buffer_size =
+        mask_bounds_rounded.width() * mask_bounds_rounded.height();
     if (mask_buffer_size < kMaxMaskBufferSize && mask_buffer_size > 0.0f) {
       bitmap.allocPixels(SkImageInfo::MakeN32Premul(
-          mask_record_bounds.width(), mask_record_bounds.height()));
+          mask_bounds_rounded.width(), mask_bounds_rounded.height()));
       SkiaPaintCanvas canvas(bitmap);
       canvas.clear(SK_ColorTRANSPARENT);
       canvas.translate(-mask_record_bounds.x(), -mask_record_bounds.y());
diff --git a/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp b/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp
index 8f4bf08..f193cff 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp
@@ -435,8 +435,19 @@
 
 bool Resource::IsEligibleForIntegrityCheck(
     SecurityOrigin* security_origin) const {
-  return security_origin->CanRequest(GetResourceRequest().Url()) ||
-         PassesAccessControlCheck(security_origin);
+  // Service workers do separate CORS checks. We need to check for opaque
+  // responses even if the response would otherwise be same origin.
+  if (GetResponse().WasFetchedViaServiceWorker()) {
+    return GetResponse().ServiceWorkerResponseType() !=
+           kWebServiceWorkerResponseTypeOpaque;
+  }
+
+  // Same origin, no CORS checks needed:
+  if (security_origin->CanRequest(GetResourceRequest().Url()))
+    return true;
+
+  // Perform standard CORS check:
+  return PassesAccessControlCheck(security_origin);
 }
 
 void Resource::SetIntegrityDisposition(
diff --git a/third_party/WebKit/public/web/WebPepperSocket.h b/third_party/WebKit/public/web/WebPepperSocket.h
index 5b0d6345f..fa83074 100644
--- a/third_party/WebKit/public/web/WebPepperSocket.h
+++ b/third_party/WebKit/public/web/WebPepperSocket.h
@@ -31,6 +31,7 @@
 #ifndef WebPepperSocket_h
 #define WebPepperSocket_h
 
+#include <memory>
 #include "public/platform/WebCommon.h"
 #include "public/platform/WebPrivatePtr.h"
 #include "public/platform/WebString.h"
@@ -63,28 +64,15 @@
     kCloseEventCodeMaximumUserDefined = 4999
   };
 
-  enum BinaryType { kBinaryTypeBlob = 0, kBinaryTypeArrayBuffer = 1 };
-
-  BLINK_EXPORT static WebPepperSocket* Create(const WebDocument&,
-                                              WebPepperSocketClient*);
+  BLINK_EXPORT static std::unique_ptr<WebPepperSocket> Create(
+      const WebDocument&,
+      WebPepperSocketClient*);
   virtual ~WebPepperSocket() {}
 
-  // These functions come from binaryType attribute of the WebSocket API
-  // specification. It specifies binary object type for receiving binary
-  // frames representation. Receiving text frames are always mapped to
-  // WebString type regardless of this attribute.
-  // Default type is BinaryTypeBlob. But currently it is not supported.
-  // Set BinaryTypeArrayBuffer here ahead of using binary communication.
-  // See also, The WebSocket API - http://www.w3.org/TR/websockets/ .
-  virtual BinaryType GetBinaryType() const = 0;
-  virtual bool SetBinaryType(BinaryType) = 0;
-
   virtual void Connect(const WebURL&, const WebString& protocol) = 0;
-  virtual WebString Subprotocol() { return WebString(); }
-  virtual WebString Extensions() { return WebString(); }
+  virtual WebString Subprotocol() = 0;
   virtual bool SendText(const WebString&) = 0;
   virtual bool SendArrayBuffer(const WebArrayBuffer&) = 0;
-  virtual unsigned long BufferedAmount() const { return 0; }
   virtual void Close(int code, const WebString& reason) = 0;
   virtual void Fail(const WebString& reason) = 0;
   virtual void Disconnect() = 0;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 3b10a50..2de515a 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -2542,6 +2542,10 @@
   <int value="171" label="RFH_BASE_URL_FOR_DATA_URL_SPECIFIED"/>
   <int value="172" label="RFPH_ILLEGAL_UPLOAD_PARAMS"/>
   <int value="173" label="SWDH_PROVIDER_CREATED_ILLEGAL_TYPE"/>
+  <int value="174" label="SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_NOT_WINDOW"/>
+  <int value="175" label="SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_CONTROLLER"/>
+  <int value="176" label="SWDH_PROVIDER_CREATED_DUPLICATE_ID"/>
+  <int value="177" label="SWDH_PROVIDER_CREATED_BAD_ID"/>
 </enum>
 
 <enum name="BadMessageReasonExtensions">