diff --git a/DEPS b/DEPS
index b5c9dc61..4c628d2 100644
--- a/DEPS
+++ b/DEPS
@@ -232,7 +232,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' + '@' + '73c0f2ada2cec69680336eee7bb7ee2b49417753', # commit position 17805
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'e89a6ff7bdf55a250b353d9a63d9d4bd53475a74', # commit position 17835
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
index 875f466..b9311fd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
@@ -229,6 +229,7 @@
      * Tests that a successful requestPresent call actually enters VR
      */
     @SmallTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testRequestPresentEntersVr() throws InterruptedException {
         String testName = "test_requestPresent_enters_vr";
         loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
@@ -308,6 +309,7 @@
      * Tests that non-focused tabs cannot get pose information.
      */
     @SmallTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testPoseDataUnfocusedTab() throws InterruptedException {
         String testName = "test_pose_data_unfocused_tab";
         loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
@@ -380,6 +382,7 @@
      * VR Services is installed and up to date.
      */
     @MediumTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testInfoBarNotPresentWhenVrServicesCurrent() throws InterruptedException {
         infoBarTestHelper(VrCoreVersionChecker.VR_READY);
     }
@@ -389,6 +392,7 @@
      * VR Services is outdated.
      */
     @MediumTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testInfoBarPresentWhenVrServicesOutdated() throws InterruptedException {
         infoBarTestHelper(VrCoreVersionChecker.VR_OUT_OF_DATE);
     }
@@ -398,6 +402,7 @@
      * Services is missing.
      */
     @MediumTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testInfoBarPresentWhenVrServicesMissing() throws InterruptedException {
         infoBarTestHelper(VrCoreVersionChecker.VR_NOT_AVAILABLE);
     }
@@ -407,6 +412,7 @@
      * is not supported on the device.
      */
     @MediumTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testInfoBarNotPresentWhenVrServicesNotSupported() throws InterruptedException {
         infoBarTestHelper(VrCoreVersionChecker.VR_NOT_SUPPORTED);
     }
@@ -416,6 +422,7 @@
      * devices the WebVR tests are run on continuously.
      */
     @MediumTest
+    @DisabledTest(message = "crbug.com/713781")
     public void testDeviceCapabilitiesMatchExpectations() throws InterruptedException {
         String testName = "test_device_capabilities_match_expectations";
         loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
index 59837e1..acd1c01 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
@@ -74,15 +74,7 @@
 views::ClientView* ChooserDialogView::CreateClientView(views::Widget* widget) {
   views::DialogClientView* client =
       new views::DialogClientView(widget, GetContentsView());
-
-  constexpr int kMinWidth = 402;
-  constexpr int kMinHeight = 320;
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
-  int min_width = provider->GetDialogPreferredWidth(DialogWidth::MEDIUM);
-  if (!min_width)
-    min_width = kMinWidth;
-  client->set_minimum_size(gfx::Size(min_width, kMinHeight));
-
   client->set_button_row_insets(gfx::Insets(
       provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_VERTICAL), 0, 0,
       0));
diff --git a/components/translate/core/browser/translate_browser_metrics.h b/components/translate/core/browser/translate_browser_metrics.h
index cad2929..c83c6bb9 100644
--- a/components/translate/core/browser/translate_browser_metrics.h
+++ b/components/translate/core/browser/translate_browser_metrics.h
@@ -29,7 +29,7 @@
 // below.
 enum InitiationStatusType {
   INITIATION_STATUS_DISABLED_BY_PREFS,
-  INITIATION_STATUS_DISABLED_BY_SWITCH,
+  DEPRECATE_INITIATION_STATUS_DISABLED_BY_SWITCH,
   INITIATION_STATUS_DISABLED_BY_CONFIG,
   INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED,
   INITIATION_STATUS_URL_IS_NOT_SUPPORTED,
diff --git a/components/translate/core/browser/translate_browser_metrics_unittest.cc b/components/translate/core/browser/translate_browser_metrics_unittest.cc
index ef0fb14..283dfd5 100644
--- a/components/translate/core/browser/translate_browser_metrics_unittest.cc
+++ b/components/translate/core/browser/translate_browser_metrics_unittest.cc
@@ -30,7 +30,6 @@
   }
 
   void CheckInitiationStatus(int expected_disabled_by_prefs,
-                             int expected_disabled_by_switch,
                              int expected_disabled_by_config,
                              int expected_disabled_by_build,
                              int expected_language_is_not_supported,
@@ -47,10 +46,6 @@
               GetCountWithoutSnapshot(translate::TranslateBrowserMetrics::
                                           INITIATION_STATUS_DISABLED_BY_PREFS));
     EXPECT_EQ(
-        expected_disabled_by_switch,
-        GetCountWithoutSnapshot(translate::TranslateBrowserMetrics::
-                                    INITIATION_STATUS_DISABLED_BY_SWITCH));
-    EXPECT_EQ(
         expected_disabled_by_config,
         GetCountWithoutSnapshot(translate::TranslateBrowserMetrics::
                                     INITIATION_STATUS_DISABLED_BY_CONFIG));
@@ -132,46 +127,43 @@
   MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName(
       translate::TranslateBrowserMetrics::UMA_INITIATION_STATUS));
 
-  recorder.CheckInitiationStatus(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS);
-  recorder.CheckInitiationStatus(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-  translate::TranslateBrowserMetrics::ReportInitiationStatus(
-      translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH);
-  recorder.CheckInitiationStatus(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
-  recorder.CheckInitiationStatus(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_KEY);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::
           INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::
           INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::
           INITIATION_STATUS_URL_IS_NOT_SUPPORTED);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0);
   translate::TranslateBrowserMetrics::ReportInitiationStatus(
       translate::TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR);
-  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+  recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
 }
 
 TEST(TranslateBrowserMetricsTest, ReportLanguageDetectionError) {
diff --git a/components/translate/core/browser/translate_download_manager.cc b/components/translate/core/browser/translate_download_manager.cc
index a431403..88c0177 100644
--- a/components/translate/core/browser/translate_download_manager.cc
+++ b/components/translate/core/browser/translate_download_manager.cc
@@ -4,7 +4,6 @@
 
 #include "components/translate/core/browser/translate_download_manager.h"
 
-#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/memory/singleton.h"
 #include "components/prefs/pref_service.h"
@@ -31,30 +30,21 @@
 }
 
 // static
-void TranslateDownloadManager::RequestLanguageList() {
+void TranslateDownloadManager::RequestLanguageList(PrefService* prefs) {
+  // We don't want to do this when translate is disabled.
+  DCHECK(prefs != NULL);
+  if (!prefs->GetBoolean(prefs::kEnableTranslate))
+    return;
+
   TranslateLanguageList* language_list = GetInstance()->language_list();
   if (!language_list) {
     NOTREACHED();
     return;
   }
-
   language_list->RequestLanguageList();
 }
 
 // static
-void TranslateDownloadManager::RequestLanguageList(PrefService* prefs) {
-  // We don't want to do this when translate is disabled.
-  DCHECK(prefs != NULL);
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          translate::switches::kDisableTranslate) ||
-      !prefs->GetBoolean(prefs::kEnableTranslate)) {
-    return;
-  }
-
-  RequestLanguageList();
-}
-
-// static
 void TranslateDownloadManager::GetSupportedLanguages(
     std::vector<std::string>* languages) {
   TranslateLanguageList* language_list = GetInstance()->language_list();
diff --git a/components/translate/core/browser/translate_download_manager.h b/components/translate/core/browser/translate_download_manager.h
index c7f6923..ed0ba219 100644
--- a/components/translate/core/browser/translate_download_manager.h
+++ b/components/translate/core/browser/translate_download_manager.h
@@ -51,13 +51,10 @@
   TranslateScript* script() { return script_.get(); }
 
   // Let the caller decide if and when we should fetch the language list from
-  // the translate server. This is a NOOP if switches::kDisableTranslate is set
-  // or if prefs::kEnableTranslate is set to false.
+  // the translate server. This is a NOOP if prefs::kEnableTranslate is set to
+  // false.
   static void RequestLanguageList(PrefService* prefs);
 
-  // Fetches the language list from the translate server.
-  static void RequestLanguageList();
-
   // Fills |languages| with the list of languages that the translate server can
   // translate to and from.
   static void GetSupportedLanguages(std::vector<std::string>* languages);
diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc
index f09b9d7..a9970118 100644
--- a/components/translate/core/browser/translate_manager.cc
+++ b/components/translate/core/browser/translate_manager.cc
@@ -188,15 +188,6 @@
     return;
   }
 
-  // Allow disabling of translate from the command line to assist with
-  // automated browser testing.
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          translate::switches::kDisableTranslate)) {
-    TranslateBrowserMetrics::ReportInitiationStatus(
-        TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH);
-    return;
-  }
-
   // MHTML pages currently cannot be translated.
   // See bug: 217945.
   if (translate_driver_->GetContentsMimeType() == "multipart/related") {
diff --git a/components/translate/core/common/translate_switches.cc b/components/translate/core/common/translate_switches.cc
index 2a6da776..9ee0352 100644
--- a/components/translate/core/common/translate_switches.cc
+++ b/components/translate/core/common/translate_switches.cc
@@ -7,11 +7,6 @@
 namespace translate {
 namespace switches {
 
-// Allows disabling of translate from the command line to assist with automated
-// browser testing (e.g. Selenium/WebDriver). Normal browser users should
-// disable translate with the preference.
-const char kDisableTranslate[] = "disable-translate";
-
 // Overrides the default server used for Google Translate.
 const char kTranslateScriptURL[] = "translate-script-url";
 
diff --git a/components/translate/core/common/translate_switches.h b/components/translate/core/common/translate_switches.h
index 4db33fc8..ad7010b0 100644
--- a/components/translate/core/common/translate_switches.h
+++ b/components/translate/core/common/translate_switches.h
@@ -8,7 +8,6 @@
 namespace translate {
 namespace switches {
 
-extern const char kDisableTranslate[];
 extern const char kTranslateScriptURL[];
 extern const char kTranslateSecurityOrigin[];
 extern const char kTranslateRankerModelURL[];
diff --git a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
index 0819498..7ea76ac 100644
--- a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
+++ b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
@@ -78,8 +78,16 @@
                   kCanvasCaptureColorTestHtmlFile);
 }
 
+#if defined(OS_ANDROID)
+// Remote mojo renderer does not send audio/video frames back to the renderer
+// process and hence does not support capture: https://crbug.com/641559.
+#define MAYBE_VerifyCanvasWebGLCaptureColor \
+  DISABLED_VerifyCanvasWebGLCaptureColor
+#else
+#define MAYBE_VerifyCanvasWebGLCaptureColor VerifyCanvasWebGLCaptureColor
+#endif
 IN_PROC_BROWSER_TEST_F(WebRtcCaptureFromElementBrowserTest,
-                       VerifyCanvasWebGLCaptureColor) {
+                       MAYBE_VerifyCanvasWebGLCaptureColor) {
 #if !defined(OS_MACOSX)
   // TODO(crbug.com/706009): Make this test pass on mac.  Behavior is not buggy
   // (verified manually) on mac, but for some reason this test fails on the mac
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index ac801ce..46194b1 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -250,9 +250,6 @@
   }
 
   switch (blink_config.ice_transport_policy) {
-    case blink::WebRTCIceTransportPolicy::kNone:
-      webrtc_config->type = webrtc::PeerConnectionInterface::kNone;
-      break;
     case blink::WebRTCIceTransportPolicy::kRelay:
       webrtc_config->type = webrtc::PeerConnectionInterface::kRelay;
       break;
diff --git a/ios/chrome/browser/payments/BUILD.gn b/ios/chrome/browser/payments/BUILD.gn
index 9e01dc4..b5793fd4 100644
--- a/ios/chrome/browser/payments/BUILD.gn
+++ b/ios/chrome/browser/payments/BUILD.gn
@@ -7,166 +7,53 @@
 source_set("payments") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
-    "credit_card_edit_coordinator.h",
-    "credit_card_edit_coordinator.mm",
-    "credit_card_edit_mediator.h",
-    "credit_card_edit_mediator.mm",
-    "js_payment_request_manager.h",
-    "js_payment_request_manager.mm",
-    "payment_items_display_coordinator.h",
-    "payment_items_display_coordinator.mm",
-    "payment_items_display_mediator.h",
-    "payment_items_display_mediator.mm",
-    "payment_method_selection_coordinator.h",
-    "payment_method_selection_coordinator.mm",
-    "payment_method_selection_mediator.h",
-    "payment_method_selection_mediator.mm",
     "payment_request.h",
     "payment_request.mm",
-    "payment_request_coordinator.h",
-    "payment_request_coordinator.mm",
-    "payment_request_error_coordinator.h",
-    "payment_request_error_coordinator.mm",
-    "payment_request_manager.h",
-    "payment_request_manager.mm",
     "payment_request_util.h",
     "payment_request_util.mm",
-    "payment_request_view_controller.h",
-    "payment_request_view_controller.mm",
-    "payment_request_view_controller_actions.h",
-    "shipping_address_selection_coordinator.h",
-    "shipping_address_selection_coordinator.mm",
-    "shipping_address_selection_mediator.h",
-    "shipping_address_selection_mediator.mm",
-    "shipping_option_selection_coordinator.h",
-    "shipping_option_selection_coordinator.mm",
-    "shipping_option_selection_mediator.h",
-    "shipping_option_selection_mediator.mm",
   ]
   deps = [
-    ":payments_ui",
     "//base",
     "//components/autofill/core/browser",
-    "//components/autofill/ios/browser",
     "//components/payments/core",
-    "//components/signin/core/browser",
-    "//components/strings",
-    "//ios/chrome/app/strings",
-    "//ios/chrome/app/theme",
+    "//components/strings:components_strings_grit",
     "//ios/chrome/browser",
-    "//ios/chrome/browser/autofill",
-    "//ios/chrome/browser/browser_state",
-    "//ios/chrome/browser/payments/cells",
-    "//ios/chrome/browser/signin",
-    "//ios/chrome/browser/ui",
-    "//ios/chrome/browser/ui/autofill",
-    "//ios/chrome/browser/ui/autofill:autofill_ui",
-    "//ios/chrome/browser/ui/autofill/cells",
-    "//ios/chrome/browser/ui/collection_view",
-    "//ios/chrome/browser/ui/collection_view/cells",
-    "//ios/chrome/browser/ui/colors",
-    "//ios/chrome/browser/ui/commands",
-    "//ios/chrome/browser/ui/icons",
-    "//ios/third_party/material_components_ios",
-    "//ios/third_party/material_roboto_font_loader_ios",
     "//ios/web",
     "//ui/base",
   ]
   libs = [ "UIKit.framework" ]
 }
 
-source_set("payments_ui") {
-  configs += [ "//build/config/compiler:enable_arc" ]
-  sources = [
-    "credit_card_edit_view_controller.h",
-    "credit_card_edit_view_controller.mm",
-    "credit_card_edit_view_controller_data_source.h",
-    "payment_items_display_view_controller.h",
-    "payment_items_display_view_controller.mm",
-    "payment_items_display_view_controller_actions.h",
-    "payment_items_display_view_controller_data_source.h",
-    "payment_request_edit_view_controller+internal.h",
-    "payment_request_edit_view_controller.h",
-    "payment_request_edit_view_controller.mm",
-    "payment_request_edit_view_controller_actions.h",
-    "payment_request_edit_view_controller_data_source.h",
-    "payment_request_editor_field.h",
-    "payment_request_editor_field.mm",
-    "payment_request_error_view_controller.h",
-    "payment_request_error_view_controller.mm",
-    "payment_request_error_view_controller_actions.h",
-    "payment_request_picker_row.h",
-    "payment_request_picker_row.mm",
-    "payment_request_picker_view_controller.h",
-    "payment_request_picker_view_controller.mm",
-    "payment_request_selector_view_controller.h",
-    "payment_request_selector_view_controller.mm",
-    "payment_request_selector_view_controller_actions.h",
-    "payment_request_selector_view_controller_data_source.h",
-  ]
-  deps = [
-    "//base",
-    "//components/strings",
-    "//ios/chrome/app/strings:ios_strings_grit",
-    "//ios/chrome/app/theme",
-    "//ios/chrome/browser/payments/cells",
-    "//ios/chrome/browser/ui",
-    "//ios/chrome/browser/ui/autofill:autofill_ui",
-    "//ios/chrome/browser/ui/autofill/cells",
-    "//ios/chrome/browser/ui/collection_view",
-    "//ios/chrome/browser/ui/colors",
-    "//ios/chrome/browser/ui/icons",
-    "//ios/third_party/material_components_ios",
-    "//ui/base",
-  ]
-  libs = [ "UIKit.framework" ]
-}
-
 source_set("unit_tests") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
   sources = [
-    "credit_card_edit_coordinator_unittest.mm",
-    "credit_card_edit_view_controller_unittest.mm",
-    "payment_items_display_coordinator_unittest.mm",
-    "payment_items_display_view_controller_unittest.mm",
-    "payment_method_selection_coordinator_unittest.mm",
-    "payment_request_coordinator_unittest.mm",
-    "payment_request_error_coordinator_unittest.mm",
-    "payment_request_error_view_controller_unittest.mm",
-    "payment_request_selector_view_controller_unittest.mm",
-    "payment_request_test_util.h",
-    "payment_request_test_util.mm",
     "payment_request_unittest.mm",
-    "payment_request_view_controller_unittest.mm",
-    "shipping_address_selection_coordinator_unittest.mm",
-    "shipping_option_selection_coordinator_unittest.mm",
   ]
   deps = [
     ":payments",
-    ":payments_ui",
+    ":test_support",
     "//base",
-    "//base/test:test_support",
     "//components/autofill/core/browser",
     "//components/autofill/core/browser:test_support",
     "//components/payments/core",
-    "//components/strings",
-    "//ios/chrome/app/strings",
     "//ios/chrome/browser",
-    "//ios/chrome/browser/browser_state:test_support",
-    "//ios/chrome/browser/payments/cells",
-    "//ios/chrome/browser/ui/autofill:autofill_ui",
-    "//ios/chrome/browser/ui/autofill/cells",
-    "//ios/chrome/browser/ui/collection_view:test_support",
-    "//ios/chrome/browser/ui/collection_view/cells",
-    "//ios/chrome/browser/ui/collection_view/cells:test_support",
-    "//ios/chrome/test:test_support",
-    "//ios/testing:ocmock_support",
-    "//ios/third_party/material_components_ios",
     "//ios/web",
-    "//ios/web:test_support",
-    "//testing/gmock",
     "//testing/gtest",
-    "//third_party/ocmock",
+  ]
+}
+
+source_set("test_support") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "payment_request_test_util.h",
+    "payment_request_test_util.mm",
+  ]
+  deps = [
+    ":payments",
+    "//base",
+    "//components/payments/core",
+    "//ios/web",
   ]
 }
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn
index 441c844..030f6f1 100644
--- a/ios/chrome/browser/ui/BUILD.gn
+++ b/ios/chrome/browser/ui/BUILD.gn
@@ -259,7 +259,6 @@
     "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
     "//ios/chrome/browser/net",
     "//ios/chrome/browser/passwords",
-    "//ios/chrome/browser/payments",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/search_engines",
@@ -287,6 +286,7 @@
     "//ios/chrome/browser/ui/ntp/recent_tabs",
     "//ios/chrome/browser/ui/omnibox:omnibox_internal",
     "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/payments",
     "//ios/chrome/browser/ui/print",
     "//ios/chrome/browser/ui/qr_scanner",
     "//ios/chrome/browser/ui/reading_list",
@@ -383,7 +383,6 @@
     "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
     "//ios/chrome/browser/net",
     "//ios/chrome/browser/passwords",
-    "//ios/chrome/browser/payments",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/search_engines",
@@ -411,6 +410,7 @@
     "//ios/chrome/browser/ui/ntp/recent_tabs",
     "//ios/chrome/browser/ui/omnibox:omnibox_internal",
     "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/payments",
     "//ios/chrome/browser/ui/print",
     "//ios/chrome/browser/ui/qr_scanner",
     "//ios/chrome/browser/ui/reading_list",
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_controller.mm b/ios/chrome/browser/ui/activity_services/activity_service_controller.mm
index 190a962d..4d54f373 100644
--- a/ios/chrome/browser/ui/activity_services/activity_service_controller.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_service_controller.mm
@@ -159,7 +159,8 @@
     ShareTo::ShareResult shareResult = completed
                                            ? ShareTo::ShareResult::SHARE_SUCCESS
                                            : ShareTo::ShareResult::SHARE_CANCEL;
-    if (activity_type_util::IsPasswordAppExActivity(activityType)) {
+    if (activity_type_util::TypeFromString(activityType) ==
+        activity_type_util::APPEX_PASSWORD_MANAGEMENT) {
       // A compatible Password Management App Extension was invoked.
       shouldResetUI = [self processItemsReturnedFromActivity:activityType
                                                       status:shareResult
diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util.h b/ios/chrome/browser/ui/activity_services/activity_type_util.h
index 55651cd..69207f5 100644
--- a/ios/chrome/browser/ui/activity_services/activity_type_util.h
+++ b/ios/chrome/browser/ui/activity_services/activity_type_util.h
@@ -41,20 +41,11 @@
   UNKNOWN,
 };
 
-// Returns the ActivityType associated with |activityString|.
+// Returns the ActivityType enum associated with |activityString|, which is the
+// bundle ID of a iOS App Extension. Returns UNKNOWN if |activityString| does
+// match any known App Extensions. |activityString| must not be nil.
 ActivityType TypeFromString(NSString* activityString);
 
-// Returns the version number to use for Password Management App Extensions
-// for the activity indicated by |activityString|. This string is the
-// identification for the App Extension. Returned value is an autoreleased
-// object or nil if |activityString| does not belong to a Password
-// Management App Extension.
-NSNumber* PasswordAppExActivityVersion(NSString* activityString);
-
-// Whether activity indicated in |activityString| is an iOS Password Management
-// App Extension.
-bool IsPasswordAppExActivity(NSString* activityString);
-
 // Returns the message to present when the activity |type| has completed
 // successfully. Returns nil if no message should be presented.
 NSString* CompletionMessageForActivity(ActivityType type);
diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util.mm b/ios/chrome/browser/ui/activity_services/activity_type_util.mm
index 15b3a96..a1bfbda 100644
--- a/ios/chrome/browser/ui/activity_services/activity_type_util.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_type_util.mm
@@ -117,25 +117,11 @@
         return assocation.type_;
     }
   }
-  if (IsPasswordManagerActivity(activityString)) {
+  if (IsPasswordManagerActivity(activityString))
     return APPEX_PASSWORD_MANAGEMENT;
-  }
   return UNKNOWN;
 }
 
-NSNumber* PasswordAppExActivityVersion(NSString* activityString) {
-  switch (TypeFromString(activityString)) {
-    case APPEX_PASSWORD_MANAGEMENT:
-      return activity_services::kPasswordAppExVersionNumber;
-    default:
-      return nil;
-  }
-}
-
-bool IsPasswordAppExActivity(NSString* activityString) {
-  return PasswordAppExActivityVersion(activityString) != nil;
-}
-
 NSString* CompletionMessageForActivity(ActivityType type) {
   // Some activities can be reported as completed even if not successful.
   // Make sure that the message is meaningful even if the activity completed
diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util_unittest.mm b/ios/chrome/browser/ui/activity_services/activity_type_util_unittest.mm
index 37f2266..d7240cf 100644
--- a/ios/chrome/browser/ui/activity_services/activity_type_util_unittest.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_type_util_unittest.mm
@@ -58,53 +58,47 @@
 
 TEST(ActivityTypeUtilTest, IsPasswordAppExtensionTest) {
   // Verifies that known Bundle ID for 1Password requires exact match.
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.agilebits.onepassword-ios.extension"));
-  EXPECT_FALSE(activity_type_util::IsPasswordAppExActivity(
-      @"com.agilebits.onepassword-ios.extension.otherstuff"));
-  // Verifies that known Bundle ID for LastPass requires exact match.
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.lastpass.ilastpass.LastPassExt"));
-  EXPECT_FALSE(activity_type_util::IsPasswordAppExActivity(
-      @"com.lastpass.ilastpass.LastPassExt.otherstuff"));
-  // Verifies that both variants of Dashlane Bundle IDs are recognized.
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.dashlane.dashlanephonefinal.SafariExtension"));
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.dashlane.dashlanephonefinal.appextension"));
-  // Verifies that any Bundle ID with @"find-login-action" is recognized.
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.some-company.find-login-action.an-extension"));
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.some-company.compatible-find-login-action-an-extension"));
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.some-company.find-login-action-as-prefix"));
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.some-company.with-suffix-of-find-login-action"));
-  EXPECT_TRUE(activity_type_util::IsPasswordAppExActivity(
-      @"com.google.find-login-action.extension"));
-  // Verifies non-matching Bundle IDs.
-  EXPECT_FALSE(
-      activity_type_util::IsPasswordAppExActivity(@"com.google.chrome.ios"));
-  EXPECT_FALSE(activity_type_util::IsPasswordAppExActivity(
-      @"com.apple.UIKit.activity.PostToFacebook"));
-}
-
-TEST(ActivityTypeUtilTest, PasswordAppExtensionVersionTest) {
-  EXPECT_EQ(activity_services::kPasswordAppExVersionNumber,
-            activity_type_util::PasswordAppExActivityVersion(
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
                 @"com.agilebits.onepassword-ios.extension"));
-  EXPECT_EQ(activity_services::kPasswordAppExVersionNumber,
-            activity_type_util::PasswordAppExActivityVersion(
+  EXPECT_NE(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.agilebits.onepassword-ios.extension.otherstuff"));
+  // Verifies that known Bundle ID for LastPass requires exact match.
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
                 @"com.lastpass.ilastpass.LastPassExt"));
-  EXPECT_EQ(activity_services::kPasswordAppExVersionNumber,
-            activity_type_util::PasswordAppExActivityVersion(
+  EXPECT_NE(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.lastpass.ilastpass.LastPassExt.otherstuff"));
+  // Verifies that both variants of Dashlane Bundle IDs are recognized.
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
                 @"com.dashlane.dashlanephonefinal.SafariExtension"));
-  EXPECT_EQ(activity_services::kPasswordAppExVersionNumber,
-            activity_type_util::PasswordAppExActivityVersion(
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.dashlane.dashlanephonefinal.appextension"));
+  // Verifies that any Bundle ID with @"find-login-action" is recognized.
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
                 @"com.some-company.find-login-action.an-extension"));
-  EXPECT_NE(activity_services::kPasswordAppExVersionNumber,
-            activity_type_util::PasswordAppExActivityVersion(
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.some-company.compatible-find-login-action-an-extension"));
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.some-company.find-login-action-as-prefix"));
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.some-company.with-suffix-of-find-login-action"));
+  EXPECT_EQ(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
+                @"com.google.find-login-action.extension"));
+  // Verifies non-matching Bundle IDs.
+  EXPECT_NE(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(@"com.google.chrome.ios"));
+  EXPECT_NE(activity_type_util::APPEX_PASSWORD_MANAGEMENT,
+            activity_type_util::TypeFromString(
                 @"com.apple.UIKit.activity.PostToFacebook"));
 }
 
diff --git a/ios/chrome/browser/ui/activity_services/chrome_activity_item_source.mm b/ios/chrome/browser/ui/activity_services/chrome_activity_item_source.mm
index e6bca66..92eed09 100644
--- a/ios/chrome/browser/ui/activity_services/chrome_activity_item_source.mm
+++ b/ios/chrome/browser/ui/activity_services/chrome_activity_item_source.mm
@@ -150,14 +150,14 @@
 
 - (id)activityViewController:(UIActivityViewController*)activityViewController
          itemForActivityType:(NSString*)activityType {
-  NSNumber* versionNumber =
-      activity_type_util::PasswordAppExActivityVersion(activityType);
-  if (!versionNumber)
+  if (activity_type_util::TypeFromString(activityType) !=
+      activity_type_util::APPEX_PASSWORD_MANAGEMENT)
     return _url;
 
   // Constructs an NSExtensionItem object from the URL being "shared".
   NSDictionary* appExItems = @{
-    activity_services::kPasswordAppExVersionNumberKey : versionNumber,
+    activity_services::kPasswordAppExVersionNumberKey :
+        activity_services::kPasswordAppExVersionNumber,
     activity_services::kPasswordAppExURLStringKey : [_url absoluteString]
   };
   NSItemProvider* itemProvider = [[NSItemProvider alloc]
@@ -188,10 +188,9 @@
   // after user made a choice of which AppEx to run, this method may be called
   // with |activityType| equals to the bundle ID of the AppEx selected.
   // Default action is to return @"public.url" UTType.
-  if (!activityType ||
-      activity_type_util::PasswordAppExActivityVersion(activityType)) {
+  if (!activityType || activity_type_util::TypeFromString(activityType) ==
+                           activity_type_util::APPEX_PASSWORD_MANAGEMENT)
     return findLoginType;
-  }
   return (NSString*)kUTTypeURL;
 }
 
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index d03e1c19..23fc50c 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -65,7 +65,6 @@
 #import "ios/chrome/browser/native_app_launcher/native_app_navigation_controller.h"
 #import "ios/chrome/browser/open_url_util.h"
 #import "ios/chrome/browser/passwords/password_controller.h"
-#import "ios/chrome/browser/payments/payment_request_manager.h"
 #include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/reading_list/offline_url_utils.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
@@ -125,6 +124,7 @@
 #import "ios/chrome/browser/ui/omnibox/page_info_view_controller.h"
 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
 #import "ios/chrome/browser/ui/page_not_available_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_manager.h"
 #import "ios/chrome/browser/ui/preload_controller.h"
 #import "ios/chrome/browser/ui/preload_controller_delegate.h"
 #import "ios/chrome/browser/ui/print/print_controller.h"
diff --git a/ios/chrome/browser/ui/payments/BUILD.gn b/ios/chrome/browser/ui/payments/BUILD.gn
new file mode 100644
index 0000000..96e279f
--- /dev/null
+++ b/ios/chrome/browser/ui/payments/BUILD.gn
@@ -0,0 +1,168 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//ios/web/js_compile.gni")
+
+source_set("payments") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "credit_card_edit_coordinator.h",
+    "credit_card_edit_coordinator.mm",
+    "credit_card_edit_mediator.h",
+    "credit_card_edit_mediator.mm",
+    "js_payment_request_manager.h",
+    "js_payment_request_manager.mm",
+    "payment_items_display_coordinator.h",
+    "payment_items_display_coordinator.mm",
+    "payment_items_display_mediator.h",
+    "payment_items_display_mediator.mm",
+    "payment_method_selection_coordinator.h",
+    "payment_method_selection_coordinator.mm",
+    "payment_method_selection_mediator.h",
+    "payment_method_selection_mediator.mm",
+    "payment_request_coordinator.h",
+    "payment_request_coordinator.mm",
+    "payment_request_error_coordinator.h",
+    "payment_request_error_coordinator.mm",
+    "payment_request_manager.h",
+    "payment_request_manager.mm",
+    "payment_request_view_controller.h",
+    "payment_request_view_controller.mm",
+    "payment_request_view_controller_actions.h",
+    "shipping_address_selection_coordinator.h",
+    "shipping_address_selection_coordinator.mm",
+    "shipping_address_selection_mediator.h",
+    "shipping_address_selection_mediator.mm",
+    "shipping_option_selection_coordinator.h",
+    "shipping_option_selection_coordinator.mm",
+    "shipping_option_selection_mediator.h",
+    "shipping_option_selection_mediator.mm",
+  ]
+  deps = [
+    ":payments_ui",
+    "//base",
+    "//components/autofill/core/browser",
+    "//components/autofill/ios/browser",
+    "//components/payments/core",
+    "//components/signin/core/browser",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/payments",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/autofill",
+    "//ios/chrome/browser/ui/autofill:autofill_ui",
+    "//ios/chrome/browser/ui/autofill/cells",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/payments/cells",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("payments_ui") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "credit_card_edit_view_controller.h",
+    "credit_card_edit_view_controller.mm",
+    "credit_card_edit_view_controller_data_source.h",
+    "payment_items_display_view_controller.h",
+    "payment_items_display_view_controller.mm",
+    "payment_items_display_view_controller_actions.h",
+    "payment_items_display_view_controller_data_source.h",
+    "payment_request_edit_view_controller+internal.h",
+    "payment_request_edit_view_controller.h",
+    "payment_request_edit_view_controller.mm",
+    "payment_request_edit_view_controller_actions.h",
+    "payment_request_edit_view_controller_data_source.h",
+    "payment_request_editor_field.h",
+    "payment_request_editor_field.mm",
+    "payment_request_error_view_controller.h",
+    "payment_request_error_view_controller.mm",
+    "payment_request_error_view_controller_actions.h",
+    "payment_request_picker_row.h",
+    "payment_request_picker_row.mm",
+    "payment_request_picker_view_controller.h",
+    "payment_request_picker_view_controller.mm",
+    "payment_request_selector_view_controller.h",
+    "payment_request_selector_view_controller.mm",
+    "payment_request_selector_view_controller_actions.h",
+    "payment_request_selector_view_controller_data_source.h",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/autofill:autofill_ui",
+    "//ios/chrome/browser/ui/autofill/cells",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/payments/cells",
+    "//ios/third_party/material_components_ios",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "credit_card_edit_coordinator_unittest.mm",
+    "credit_card_edit_view_controller_unittest.mm",
+    "payment_items_display_coordinator_unittest.mm",
+    "payment_items_display_view_controller_unittest.mm",
+    "payment_method_selection_coordinator_unittest.mm",
+    "payment_request_coordinator_unittest.mm",
+    "payment_request_error_coordinator_unittest.mm",
+    "payment_request_error_view_controller_unittest.mm",
+    "payment_request_selector_view_controller_unittest.mm",
+    "payment_request_view_controller_unittest.mm",
+    "shipping_address_selection_coordinator_unittest.mm",
+    "shipping_option_selection_coordinator_unittest.mm",
+  ]
+  deps = [
+    ":payments",
+    ":payments_ui",
+    "//base",
+    "//base/test:test_support",
+    "//components/autofill/core/browser",
+    "//components/autofill/core/browser:test_support",
+    "//components/payments/core",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/payments",
+    "//ios/chrome/browser/payments:test_support",
+    "//ios/chrome/browser/ui/autofill:autofill_ui",
+    "//ios/chrome/browser/ui/autofill/cells",
+    "//ios/chrome/browser/ui/collection_view:test_support",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/collection_view/cells:test_support",
+    "//ios/chrome/browser/ui/payments/cells",
+    "//ios/chrome/test:test_support",
+    "//ios/testing:ocmock_support",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/ui/payments/OWNERS b/ios/chrome/browser/ui/payments/OWNERS
new file mode 100644
index 0000000..4cfb56d
--- /dev/null
+++ b/ios/chrome/browser/ui/payments/OWNERS
@@ -0,0 +1,2 @@
+lpromero@chromium.org
+mahmadi@chromium.org
diff --git a/ios/chrome/browser/payments/cells/BUILD.gn b/ios/chrome/browser/ui/payments/cells/BUILD.gn
similarity index 100%
rename from ios/chrome/browser/payments/cells/BUILD.gn
rename to ios/chrome/browser/ui/payments/cells/BUILD.gn
diff --git a/ios/chrome/browser/payments/cells/accepted_payment_methods_item.h b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h
similarity index 87%
rename from ios/chrome/browser/payments/cells/accepted_payment_methods_item.h
rename to ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h
index 85e09f47..c2764f51 100644
--- a/ios/chrome/browser/payments/cells/accepted_payment_methods_item.h
+++ b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
@@ -40,4 +40,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_ACCEPTED_PAYMENT_METHODS_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/accepted_payment_methods_item.mm b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/accepted_payment_methods_item.mm
rename to ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.mm
index 8fdf969..5aa32a8 100644
--- a/ios/chrome/browser/payments/cells/accepted_payment_methods_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h"
+#import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
 
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
diff --git a/ios/chrome/browser/payments/cells/accepted_payment_methods_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm
similarity index 95%
rename from ios/chrome/browser/payments/cells/accepted_payment_methods_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm
index 13f144b3..0c9da325 100644
--- a/ios/chrome/browser/payments/cells/accepted_payment_methods_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h"
+#import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/cells/autofill_profile_item.h b/ios/chrome/browser/ui/payments/cells/autofill_profile_item.h
similarity index 85%
rename from ios/chrome/browser/payments/cells/autofill_profile_item.h
rename to ios/chrome/browser/ui/payments/cells/autofill_profile_item.h
index 6ba0da8..39bb130 100644
--- a/ios/chrome/browser/payments/cells/autofill_profile_item.h
+++ b/ios/chrome/browser/ui/payments/cells/autofill_profile_item.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
 // AutofillProfileItem is the model class corresponding to AutofillProfileCell.
@@ -47,4 +47,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_AUTOFILL_PROFILE_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/autofill_profile_item.mm b/ios/chrome/browser/ui/payments/cells/autofill_profile_item.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/autofill_profile_item.mm
rename to ios/chrome/browser/ui/payments/cells/autofill_profile_item.mm
index 3f2476e..96e7ce01 100644
--- a/ios/chrome/browser/payments/cells/autofill_profile_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/autofill_profile_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
 
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
diff --git a/ios/chrome/browser/payments/cells/autofill_profile_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/autofill_profile_item_unittest.mm
similarity index 96%
rename from ios/chrome/browser/payments/cells/autofill_profile_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/autofill_profile_item_unittest.mm
index 82e00a54..207cfa9 100644
--- a/ios/chrome/browser/payments/cells/autofill_profile_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/autofill_profile_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/cells/page_info_item.h b/ios/chrome/browser/ui/payments/cells/page_info_item.h
similarity index 89%
rename from ios/chrome/browser/payments/cells/page_info_item.h
rename to ios/chrome/browser/ui/payments/cells/page_info_item.h
index 7771ed4a..1275ef7 100644
--- a/ios/chrome/browser/payments/cells/page_info_item.h
+++ b/ios/chrome/browser/ui/payments/cells/page_info_item.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
@@ -44,4 +44,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAGE_INFO_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/page_info_item.mm b/ios/chrome/browser/ui/payments/cells/page_info_item.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/page_info_item.mm
rename to ios/chrome/browser/ui/payments/cells/page_info_item.mm
index cc5f57e3..f73f183 100644
--- a/ios/chrome/browser/payments/cells/page_info_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/page_info_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/page_info_item.h"
+#import "ios/chrome/browser/ui/payments/cells/page_info_item.h"
 
 #import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
 #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoFontLoader.h"
diff --git a/ios/chrome/browser/payments/cells/page_info_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm
similarity index 95%
rename from ios/chrome/browser/payments/cells/page_info_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm
index 63d457ee..1cfa93a 100644
--- a/ios/chrome/browser/payments/cells/page_info_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/page_info_item.h"
+#import "ios/chrome/browser/ui/payments/cells/page_info_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/cells/payment_method_item.h b/ios/chrome/browser/ui/payments/cells/payment_method_item.h
similarity index 89%
rename from ios/chrome/browser/payments/cells/payment_method_item.h
rename to ios/chrome/browser/ui/payments/cells/payment_method_item.h
index 5b6f4fc3..d7c933ea 100644
--- a/ios/chrome/browser/payments/cells/payment_method_item.h
+++ b/ios/chrome/browser/ui/payments/cells/payment_method_item.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
 // PaymentMethodItem is the model class corresponding to PaymentMethodCell.
@@ -61,4 +61,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENT_METHOD_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/payment_method_item.mm b/ios/chrome/browser/ui/payments/cells/payment_method_item.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/payment_method_item.mm
rename to ios/chrome/browser/ui/payments/cells/payment_method_item.mm
index f39b537..a32d572 100644
--- a/ios/chrome/browser/payments/cells/payment_method_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/payment_method_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
 
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
diff --git a/ios/chrome/browser/payments/cells/payment_method_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm
similarity index 96%
rename from ios/chrome/browser/payments/cells/payment_method_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm
index cabfb3b..663acd6 100644
--- a/ios/chrome/browser/payments/cells/payment_method_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/cells/payments_has_accessory_type.h b/ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h
similarity index 72%
rename from ios/chrome/browser/payments/cells/payments_has_accessory_type.h
rename to ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h
index 8ca597c..91cffe8 100644
--- a/ios/chrome/browser/payments/cells/payments_has_accessory_type.h
+++ b/ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
 
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
@@ -16,4 +16,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_HAS_ACCESSORY_TYPE_H_
diff --git a/ios/chrome/browser/payments/cells/payments_text_item.h b/ios/chrome/browser/ui/payments/cells/payments_text_item.h
similarity index 86%
rename from ios/chrome/browser/payments/cells/payments_text_item.h
rename to ios/chrome/browser/ui/payments/cells/payments_text_item.h
index bef73e2..874b229 100644
--- a/ios/chrome/browser/payments/cells/payments_text_item.h
+++ b/ios/chrome/browser/ui/payments/cells/payments_text_item.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
 // PaymentsTextItem is the model class corresponding to PaymentsTextCell.
@@ -48,4 +48,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PAYMENTS_TEXT_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/payments_text_item.mm b/ios/chrome/browser/ui/payments/cells/payments_text_item.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/payments_text_item.mm
rename to ios/chrome/browser/ui/payments/cells/payments_text_item.mm
index 3c2a6d1..907e97f4 100644
--- a/ios/chrome/browser/payments/cells/payments_text_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/payments_text_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.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"
diff --git a/ios/chrome/browser/payments/cells/payments_text_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm
similarity index 95%
rename from ios/chrome/browser/payments/cells/payments_text_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm
index b9f8e13..5080b0b9 100644
--- a/ios/chrome/browser/payments/cells/payments_text_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/cells/price_item.h b/ios/chrome/browser/ui/payments/cells/price_item.h
similarity index 88%
rename from ios/chrome/browser/payments/cells/price_item.h
rename to ios/chrome/browser/ui/payments/cells/price_item.h
index 39ad3e0..c2e4af3b 100644
--- a/ios/chrome/browser/payments/cells/price_item.h
+++ b/ios/chrome/browser/ui/payments/cells/price_item.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CELLS_PRICE_ITEM_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CELLS_PRICE_ITEM_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PRICE_ITEM_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PRICE_ITEM_H_
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 
 // PriceItem is the model class corresponding to PriceCell.
@@ -51,4 +51,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CELLS_PRICE_ITEM_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CELLS_PRICE_ITEM_H_
diff --git a/ios/chrome/browser/payments/cells/price_item.mm b/ios/chrome/browser/ui/payments/cells/price_item.mm
similarity index 99%
rename from ios/chrome/browser/payments/cells/price_item.mm
rename to ios/chrome/browser/ui/payments/cells/price_item.mm
index eced2917..39debcf 100644
--- a/ios/chrome/browser/payments/cells/price_item.mm
+++ b/ios/chrome/browser/ui/payments/cells/price_item.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/price_item.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
 
 #include <algorithm>
 
diff --git a/ios/chrome/browser/payments/cells/price_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/price_item_unittest.mm
similarity index 98%
rename from ios/chrome/browser/payments/cells/price_item_unittest.mm
rename to ios/chrome/browser/ui/payments/cells/price_item_unittest.mm
index 5a4b872..abb71ef7 100644
--- a/ios/chrome/browser/payments/cells/price_item_unittest.mm
+++ b/ios/chrome/browser/ui/payments/cells/price_item_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/cells/price_item.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
 
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/credit_card_edit_coordinator.h b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h
similarity index 84%
rename from ios/chrome/browser/payments/credit_card_edit_coordinator.h
rename to ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h
index 9add44e..da3037df 100644
--- a/ios/chrome/browser/payments/credit_card_edit_coordinator.h
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
 
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
 
 namespace autofill {
 class CreditCard;
@@ -56,4 +56,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/credit_card_edit_coordinator.mm b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
similarity index 96%
rename from ios/chrome/browser/payments/credit_card_edit_coordinator.mm
rename to ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
index 93bba58c..4df801f 100644
--- a/ios/chrome/browser/payments/credit_card_edit_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/credit_card_edit_coordinator.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h"
 
 #include "base/guid.h"
 #include "base/logging.h"
@@ -13,10 +13,10 @@
 #include "components/autofill/core/common/autofill_constants.h"
 #import "components/autofill/ios/browser/credit_card_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/credit_card_edit_mediator.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type_util.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_mediator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/credit_card_edit_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
similarity index 98%
rename from ios/chrome/browser/payments/credit_card_edit_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
index ed1183f..527d7726 100644
--- a/ios/chrome/browser/payments/credit_card_edit_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/credit_card_edit_coordinator.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h"
 
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
@@ -11,11 +11,11 @@
 #include "base/test/ios/wait_util.h"
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/payments/credit_card_edit_mediator.h b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.h
similarity index 76%
rename from ios/chrome/browser/payments/credit_card_edit_mediator.h
rename to ios/chrome/browser/ui/payments/credit_card_edit_mediator.h
index 2df66172..a0f67f5 100644
--- a/ios/chrome/browser/payments/credit_card_edit_mediator.h
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
 
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller_data_source.h"
 
 class PaymentRequest;
 
@@ -29,4 +29,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_MEDIATOR_H_
diff --git a/ios/chrome/browser/payments/credit_card_edit_mediator.mm b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
similarity index 96%
rename from ios/chrome/browser/payments/credit_card_edit_mediator.mm
rename to ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
index 06b8204..07e4c41 100644
--- a/ios/chrome/browser/payments/credit_card_edit_mediator.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_mediator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/credit_card_edit_mediator.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
@@ -12,13 +12,13 @@
 #import "components/autofill/ios/browser/credit_card_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/application_context.h"
-#import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h"
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type_util.h"
+#import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller.h b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h
similarity index 82%
rename from ios/chrome/browser/payments/credit_card_edit_view_controller.h
rename to ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h
index fc3b2ddc..d3c1114b 100644
--- a/ios/chrome/browser/payments/credit_card_edit_view_controller.h
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
 
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller_data_source.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
 
 @class CreditCardEditViewController;
 
@@ -51,4 +51,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller.mm b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
similarity index 97%
rename from ios/chrome/browser/payments/credit_card_edit_view_controller.mm
rename to ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
index 2f233fc..3ab54a89 100644
--- a/ios/chrome/browser/payments/credit_card_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller.mm
@@ -2,14 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h"
 
 #import "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller_actions.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
@@ -18,6 +15,9 @@
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller+internal.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller_actions.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller_data_source.h b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller_data_source.h
similarity index 81%
rename from ios/chrome/browser/payments/credit_card_edit_view_controller_data_source.h
rename to ios/chrome/browser/ui/payments/credit_card_edit_view_controller_data_source.h
index 849be6c..f8b7220 100644
--- a/ios/chrome/browser/payments/credit_card_edit_view_controller_data_source.h
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller_data_source.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller_data_source.h"
 
 @class CollectionViewItem;
 
@@ -42,4 +42,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_CREDIT_CARD_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller_unittest.mm
similarity index 95%
rename from ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm
rename to ios/chrome/browser/ui/payments/credit_card_edit_view_controller_unittest.mm
index 82418771..9eb6785 100644
--- a/ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/credit_card_edit_view_controller_unittest.mm
@@ -2,14 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/credit_card_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
 #include "components/autofill/core/browser/field_types.h"
-#import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h"
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
@@ -18,6 +15,9 @@
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/ios/chrome/browser/payments/js_payment_request_manager.h b/ios/chrome/browser/ui/payments/js_payment_request_manager.h
similarity index 93%
rename from ios/chrome/browser/payments/js_payment_request_manager.h
rename to ios/chrome/browser/ui/payments/js_payment_request_manager.h
index ae33808..f1a573d3 100644
--- a/ios/chrome/browser/payments/js_payment_request_manager.h
+++ b/ios/chrome/browser/ui/payments/js_payment_request_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
 
 #include "base/strings/string16.h"
 #include "ios/chrome/browser/procedural_block_types.h"
@@ -73,4 +73,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_JS_PAYMENT_REQUEST_MANAGER_H_
diff --git a/ios/chrome/browser/payments/js_payment_request_manager.mm b/ios/chrome/browser/ui/payments/js_payment_request_manager.mm
similarity index 98%
rename from ios/chrome/browser/payments/js_payment_request_manager.mm
rename to ios/chrome/browser/ui/payments/js_payment_request_manager.mm
index 9ca9a8c..882e260 100644
--- a/ios/chrome/browser/payments/js_payment_request_manager.mm
+++ b/ios/chrome/browser/ui/payments/js_payment_request_manager.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/js_payment_request_manager.h"
+#import "ios/chrome/browser/ui/payments/js_payment_request_manager.h"
 
 #include "base/json/json_writer.h"
 #include "base/json/string_escape.h"
diff --git a/ios/chrome/browser/payments/payment_items_display_coordinator.h b/ios/chrome/browser/ui/payments/payment_items_display_coordinator.h
similarity index 83%
rename from ios/chrome/browser/payments/payment_items_display_coordinator.h
rename to ios/chrome/browser/ui/payments/payment_items_display_coordinator.h
index 2dcb4b73..cebc72d5 100644
--- a/ios/chrome/browser/payments/payment_items_display_coordinator.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_coordinator.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/payment_items_display_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller.h"
 
 class PaymentRequest;
 
@@ -46,4 +46,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/payment_items_display_coordinator.mm b/ios/chrome/browser/ui/payments/payment_items_display_coordinator.mm
similarity index 92%
rename from ios/chrome/browser/payments/payment_items_display_coordinator.mm
rename to ios/chrome/browser/ui/payments/payment_items_display_coordinator.mm
index b31cb76c..027990af 100644
--- a/ios/chrome/browser/payments/payment_items_display_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_coordinator.mm
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_items_display_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_coordinator.h"
 
 #include "base/logging.h"
-#import "ios/chrome/browser/payments/payment_items_display_mediator.h"
 #include "ios/chrome/browser/payments/payment_request.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_mediator.h"
 #include "ios/web/public/payments/payment_request.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/payment_items_display_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm
similarity index 97%
rename from ios/chrome/browser/payments/payment_items_display_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm
index f702a4d..ee10378e 100644
--- a/ios/chrome/browser/payments/payment_items_display_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_items_display_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -10,9 +10,9 @@
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
-#import "ios/chrome/browser/payments/payment_items_display_view_controller.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/payments/payment_items_display_mediator.h b/ios/chrome/browser/ui/payments/payment_items_display_mediator.h
similarity index 70%
rename from ios/chrome/browser/payments/payment_items_display_mediator.h
rename to ios/chrome/browser/ui/payments/payment_items_display_mediator.h
index 301a3a46..0874430 100644
--- a/ios/chrome/browser/payments/payment_items_display_mediator.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_mediator.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
 
-#import "ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h"
 
 class PaymentRequest;
 
@@ -23,4 +23,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_MEDIATOR_H_
diff --git a/ios/chrome/browser/payments/payment_items_display_mediator.mm b/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_items_display_mediator.mm
rename to ios/chrome/browser/ui/payments/payment_items_display_mediator.mm
index d84eac9..2ba9d9b 100644
--- a/ios/chrome/browser/payments/payment_items_display_mediator.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm
@@ -5,14 +5,14 @@
 #import <UIKit/UIKit.h>
 #include <vector>
 
-#import "ios/chrome/browser/payments/payment_items_display_mediator.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/payments/core/currency_formatter.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/payment_items_display_view_controller.h b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
similarity index 82%
rename from ios/chrome/browser/payments/payment_items_display_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
index 751152a..b20a3790 100644
--- a/ios/chrome/browser/payments/payment_items_display_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
-#import "ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h"
 
 // The accessibility identifiers of the cells in the collection view.
 extern NSString* const kPaymentItemsDisplayItemID;
@@ -38,8 +38,8 @@
 
 // The delegate to be notified when the user selects touches the return button
 // or the pay button.
-@property(nonatomic, weak)
-    id<PaymentItemsDisplayViewControllerDelegate> delegate;
+@property(nonatomic, weak) id<PaymentItemsDisplayViewControllerDelegate>
+    delegate;
 
 // The data source for this view controller.
 @property(nonatomic, weak) id<PaymentItemsDisplayViewControllerDataSource>
@@ -56,4 +56,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_items_display_view_controller.mm b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
similarity index 96%
rename from ios/chrome/browser/payments/payment_items_display_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
index bc8c347..875be83 100644
--- a/ios/chrome/browser/payments/payment_items_display_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller.mm
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_items_display_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
-#import "ios/chrome/browser/payments/payment_items_display_view_controller_actions.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item+collection_view_controller.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/icons/chrome_icon.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller_actions.h"
 #include "ios/chrome/browser/ui/rtl_geometry.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
diff --git a/ios/chrome/browser/payments/payment_items_display_view_controller_actions.h b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_actions.h
similarity index 65%
rename from ios/chrome/browser/payments/payment_items_display_view_controller_actions.h
rename to ios/chrome/browser/ui/payments/payment_items_display_view_controller_actions.h
index f8ba69d1..0183bc1e 100644
--- a/ios/chrome/browser/payments/payment_items_display_view_controller_actions.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_actions.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
 
 // Protocol handling the actions sent in the PaymentItemsDisplayViewController.
 @protocol PaymentItemsDisplayViewControllerActions
@@ -16,4 +16,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_ACTIONS_H_
diff --git a/ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h
similarity index 71%
rename from ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h
rename to ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h
index b924677..05b9966 100644
--- a/ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
 
 #import <Foundation/Foundation.h>
 
@@ -21,4 +21,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_ITEMS_DISPLAY_VIEW_CONTROLLER_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/payments/payment_items_display_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_unittest.mm
similarity index 92%
rename from ios/chrome/browser/payments/payment_items_display_view_controller_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_items_display_view_controller_unittest.mm
index 2407b00..02c09a4e 100644
--- a/ios/chrome/browser/payments/payment_items_display_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_items_display_view_controller_unittest.mm
@@ -2,17 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_items_display_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
-#import "ios/chrome/browser/payments/payment_items_display_view_controller_data_source.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_view_controller_data_source.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/payment_method_selection_coordinator.h b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h
similarity index 78%
rename from ios/chrome/browser/payments/payment_method_selection_coordinator.h
rename to ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h
index d02a1a5..c644675 100644
--- a/ios/chrome/browser/payments/payment_method_selection_coordinator.h
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/credit_card_edit_coordinator.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/credit_card_edit_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 
 class PaymentRequest;
 
@@ -49,9 +49,9 @@
 
 // The delegate to be notified when the user selects a payment method or returns
 // without selecting a payment method.
-@property(nonatomic, weak)
-    id<PaymentMethodSelectionCoordinatorDelegate> delegate;
+@property(nonatomic, weak) id<PaymentMethodSelectionCoordinatorDelegate>
+    delegate;
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/payment_method_selection_coordinator.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
similarity index 96%
rename from ios/chrome/browser/payments/payment_method_selection_coordinator.mm
rename to ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
index 1bf7a7d6..26e681f 100644
--- a/ios/chrome/browser/payments/payment_method_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_method_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h"
 
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/strings/grit/components_strings.h"
-#include "ios/chrome/browser/payments/payment_method_selection_mediator.h"
 #include "ios/chrome/browser/payments/payment_request.h"
+#include "ios/chrome/browser/ui/payments/payment_method_selection_mediator.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/payment_method_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
similarity index 97%
rename from ios/chrome/browser/payments/payment_method_selection_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
index 78be85a..5d4a2ba6 100644
--- a/ios/chrome/browser/payments/payment_method_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_method_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -11,8 +11,8 @@
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/payments/payment_method_selection_mediator.h b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.h
similarity index 73%
rename from ios/chrome/browser/payments/payment_method_selection_mediator.h
rename to ios/chrome/browser/ui/payments/payment_method_selection_mediator.h
index 13e3be7..6eb9a32 100644
--- a/ios/chrome/browser/payments/payment_method_selection_mediator.h
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 
 class PaymentRequest;
 
@@ -26,4 +26,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_METHOD_SELECTION_MEDIATOR_H_
diff --git a/ios/chrome/browser/payments/payment_method_selection_mediator.mm b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_method_selection_mediator.mm
rename to ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
index efb3f2b..66451bd 100644
--- a/ios/chrome/browser/payments/payment_method_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/payment_method_selection_mediator.mm
@@ -4,7 +4,7 @@
 
 #include <vector>
 
-#import "ios/chrome/browser/payments/payment_method_selection_mediator.h"
+#import "ios/chrome/browser/ui/payments/payment_method_selection_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
@@ -12,10 +12,10 @@
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #include "ios/chrome/browser/payments/payment_request_util.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/payment_request_coordinator.h b/ios/chrome/browser/ui/payments/payment_request_coordinator.h
similarity index 86%
rename from ios/chrome/browser/payments/payment_request_coordinator.h
rename to ios/chrome/browser/ui/payments/payment_request_coordinator.h
index ab6dc62da..938259a2 100644
--- a/ios/chrome/browser/payments/payment_request_coordinator.h
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator.h
@@ -2,20 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 
 #include "base/ios/block_types.h"
 #include "base/strings/string16.h"
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/payment_items_display_coordinator.h"
-#import "ios/chrome/browser/payments/payment_method_selection_coordinator.h"
-#include "ios/chrome/browser/payments/payment_request_error_coordinator.h"
-#import "ios/chrome/browser/payments/payment_request_view_controller.h"
-#import "ios/chrome/browser/payments/shipping_address_selection_coordinator.h"
-#import "ios/chrome/browser/payments/shipping_option_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_items_display_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_method_selection_coordinator.h"
+#include "ios/chrome/browser/ui/payments/payment_request_error_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_view_controller.h"
+#import "ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h"
 
 class PaymentRequest;
 
@@ -119,4 +119,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/payment_request_coordinator.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
similarity index 99%
rename from ios/chrome/browser/payments/payment_request_coordinator.mm
rename to ios/chrome/browser/ui/payments/payment_request_coordinator.mm
index fbb42b08..f0e9e6d6 100644
--- a/ios/chrome/browser/payments/payment_request_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_coordinator.h"
 
 #include <unordered_set>
 #include <vector>
diff --git a/ios/chrome/browser/payments/payment_request_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
similarity index 98%
rename from ios/chrome/browser/payments/payment_request_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
index afc4e10..f107112 100644
--- a/ios/chrome/browser/payments/payment_request_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -16,7 +16,7 @@
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
-#import "ios/chrome/browser/payments/payment_request_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_view_controller.h"
 #import "ios/chrome/test/scoped_key_window.h"
 #import "ios/testing/ocmock_complex_type_helper.h"
 #include "ios/web/public/payments/payment_request.h"
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller+internal.h
similarity index 84%
rename from ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h
rename to ios/chrome/browser/ui/payments/payment_request_edit_view_controller+internal.h
index b68be158..55b9c02 100644
--- a/ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller+internal.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
 
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
 
 // Use these as the starting values for section identifier and item type enums
 // in subclasses. These values are chosen to prevent overlapping with the
@@ -42,4 +42,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_INTERNAL_H_
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h
similarity index 84%
rename from ios/chrome/browser/payments/payment_request_edit_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h
index ce647c8..bad5561 100644
--- a/ios/chrome/browser/payments/payment_request_edit_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller_data_source.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller_data_source.h"
 
 extern NSString* const kWarningMessageAccessibilityID;
 
@@ -47,4 +47,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
similarity index 97%
rename from ios/chrome/browser/payments/payment_request_edit_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
index eea0e2d..5eb5a51 100644
--- a/ios/chrome/browser/payments/payment_request_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller.mm
@@ -2,20 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
 
 #include "base/logging.h"
 #import "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller+internal.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/autofill/autofill_edit_accessory_view.h"
 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h"
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller+internal.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller_actions.h b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_actions.h
similarity index 65%
rename from ios/chrome/browser/payments/payment_request_edit_view_controller_actions.h
rename to ios/chrome/browser/ui/payments/payment_request_edit_view_controller_actions.h
index f74564b..c8d24a6 100644
--- a/ios/chrome/browser/payments/payment_request_edit_view_controller_actions.h
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_actions.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
 
 // Protocol handling the actions sent by the PaymentRequestEditViewController.
 @protocol PaymentRequestEditViewControllerActions
@@ -16,4 +16,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_ACTIONS_H_
diff --git a/ios/chrome/browser/payments/payment_request_edit_view_controller_data_source.h b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_data_source.h
similarity index 65%
rename from ios/chrome/browser/payments/payment_request_edit_view_controller_data_source.h
rename to ios/chrome/browser/ui/payments/payment_request_edit_view_controller_data_source.h
index 040b988..009128b 100644
--- a/ios/chrome/browser/payments/payment_request_edit_view_controller_data_source.h
+++ b/ios/chrome/browser/ui/payments/payment_request_edit_view_controller_data_source.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
 
 #import <Foundation/Foundation.h>
 
@@ -17,4 +17,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDIT_VIEW_CONTROLLER_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/payments/payment_request_editor_field.h b/ios/chrome/browser/ui/payments/payment_request_editor_field.h
similarity index 85%
rename from ios/chrome/browser/payments/payment_request_editor_field.h
rename to ios/chrome/browser/ui/payments/payment_request_editor_field.h
index 1f5960dd..cdce8a7d 100644
--- a/ios/chrome/browser/payments/payment_request_editor_field.h
+++ b/ios/chrome/browser/ui/payments/payment_request_editor_field.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
 
 #import <Foundation/Foundation.h>
 
@@ -35,4 +35,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_EDITOR_FIELD_H_
diff --git a/ios/chrome/browser/payments/payment_request_editor_field.mm b/ios/chrome/browser/ui/payments/payment_request_editor_field.mm
similarity index 92%
rename from ios/chrome/browser/payments/payment_request_editor_field.mm
rename to ios/chrome/browser/ui/payments/payment_request_editor_field.mm
index 15e9b06..27ee53e 100644
--- a/ios/chrome/browser/payments/payment_request_editor_field.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_editor_field.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/payments/payment_request_error_coordinator.h b/ios/chrome/browser/ui/payments/payment_request_error_coordinator.h
similarity index 78%
rename from ios/chrome/browser/payments/payment_request_error_coordinator.h
rename to ios/chrome/browser/ui/payments/payment_request_error_coordinator.h
index 96b6d019..d041de9 100644
--- a/ios/chrome/browser/payments/payment_request_error_coordinator.h
+++ b/ios/chrome/browser/ui/payments/payment_request_error_coordinator.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 
 #include "base/ios/block_types.h"
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/payment_request_error_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_view_controller.h"
 
 @class PaymentRequestErrorCoordinator;
 
@@ -35,4 +35,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/payment_request_error_coordinator.mm b/ios/chrome/browser/ui/payments/payment_request_error_coordinator.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_request_error_coordinator.mm
rename to ios/chrome/browser/ui/payments/payment_request_error_coordinator.mm
index 59cb206..9de2dd0 100644
--- a/ios/chrome/browser/payments/payment_request_error_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_error_coordinator.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_error_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_coordinator.h"
 
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/payment_request_error_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_request_error_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm
index b378a02..9caebeaa 100644
--- a/ios/chrome/browser/payments/payment_request_error_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_error_coordinator_unittest.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_error_coordinator.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
 #include "base/test/ios/wait_util.h"
-#import "ios/chrome/browser/payments/payment_request_error_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_view_controller.h"
 #import "ios/chrome/test/scoped_key_window.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/payments/payment_request_error_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
similarity index 78%
rename from ios/chrome/browser/payments/payment_request_error_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
index 52b7b12..3db67e5 100644
--- a/ios/chrome/browser/payments/payment_request_error_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -29,8 +29,8 @@
 @property(nonatomic, copy) NSString* errorMessage;
 
 // The delegate to be notified when the user dismisses the error.
-@property(nonatomic, weak)
-    id<PaymentRequestErrorViewControllerDelegate> delegate;
+@property(nonatomic, weak) id<PaymentRequestErrorViewControllerDelegate>
+    delegate;
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 
@@ -39,4 +39,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_request_error_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_request_error_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
index 31c91f5..812dfd19 100644
--- a/ios/chrome/browser/payments/payment_request_error_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller.mm
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_error_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/payment_request_error_view_controller_actions.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_view_controller_actions.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/payment_request_error_view_controller_actions.h b/ios/chrome/browser/ui/payments/payment_request_error_view_controller_actions.h
similarity index 61%
rename from ios/chrome/browser/payments/payment_request_error_view_controller_actions.h
rename to ios/chrome/browser/ui/payments/payment_request_error_view_controller_actions.h
index b3a898a..565c2f8 100644
--- a/ios/chrome/browser/payments/payment_request_error_view_controller_actions.h
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller_actions.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
 
 // Protocol handling the actions sent in the PaymentRequestErrorViewController.
 @protocol PaymentRequestErrorViewControllerActions
@@ -13,4 +13,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_ERROR_VIEW_CONTROLLER_ACTIONS_H_
diff --git a/ios/chrome/browser/payments/payment_request_error_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_error_view_controller_unittest.mm
similarity index 90%
rename from ios/chrome/browser/payments/payment_request_error_view_controller_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_request_error_view_controller_unittest.mm
index 4cc26753..518b9e1d 100644
--- a/ios/chrome/browser/payments/payment_request_error_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_error_view_controller_unittest.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_error_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_error_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/ios/chrome/browser/payments/payment_request_manager.h b/ios/chrome/browser/ui/payments/payment_request_manager.h
similarity index 90%
rename from ios/chrome/browser/payments/payment_request_manager.h
rename to ios/chrome/browser/ui/payments/payment_request_manager.h
index c93dbbc5..1776b8f 100644
--- a/ios/chrome/browser/payments/payment_request_manager.h
+++ b/ios/chrome/browser/ui/payments/payment_request_manager.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -58,4 +58,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_MANAGER_H_
diff --git a/ios/chrome/browser/payments/payment_request_manager.mm b/ios/chrome/browser/ui/payments/payment_request_manager.mm
similarity index 98%
rename from ios/chrome/browser/payments/payment_request_manager.mm
rename to ios/chrome/browser/ui/payments/payment_request_manager.mm
index aa3cf2e..68f25f13 100644
--- a/ios/chrome/browser/payments/payment_request_manager.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_manager.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_manager.h"
+#import "ios/chrome/browser/ui/payments/payment_request_manager.h"
 
 #include "base/ios/block_types.h"
 #include "base/ios/ios_util.h"
@@ -17,13 +17,13 @@
 #include "components/payments/core/payment_address.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#import "ios/chrome/browser/payments/js_payment_request_manager.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_coordinator.h"
 #include "ios/chrome/browser/procedural_block_types.h"
 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
 #import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
 #import "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#import "ios/chrome/browser/ui/payments/js_payment_request_manager.h"
+#import "ios/chrome/browser/ui/payments/payment_request_coordinator.h"
 #include "ios/web/public/favicon_status.h"
 #include "ios/web/public/navigation_item.h"
 #include "ios/web/public/navigation_manager.h"
@@ -535,9 +535,8 @@
 
   const web::NavigationItem* navigationItem =
       [self webState]->GetNavigationManager()->GetLastCommittedItem();
-  return navigationItem &&
-         navigationItem->GetSSL().security_style ==
-             web::SECURITY_STYLE_AUTHENTICATED;
+  return navigationItem && navigationItem->GetSSL().security_style ==
+                               web::SECURITY_STYLE_AUTHENTICATED;
 }
 
 #pragma mark - PaymentRequestCoordinatorDelegate methods
diff --git a/ios/chrome/browser/payments/payment_request_picker_row.h b/ios/chrome/browser/ui/payments/payment_request_picker_row.h
similarity index 74%
rename from ios/chrome/browser/payments/payment_request_picker_row.h
rename to ios/chrome/browser/ui/payments/payment_request_picker_row.h
index f6e3745..ea106a6 100644
--- a/ios/chrome/browser/payments/payment_request_picker_row.h
+++ b/ios/chrome/browser/ui/payments/payment_request_picker_row.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
 
 #import <Foundation/Foundation.h>
 
@@ -19,4 +19,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_ROW_H_
diff --git a/ios/chrome/browser/payments/payment_request_picker_row.mm b/ios/chrome/browser/ui/payments/payment_request_picker_row.mm
similarity index 89%
rename from ios/chrome/browser/payments/payment_request_picker_row.mm
rename to ios/chrome/browser/ui/payments/payment_request_picker_row.mm
index 26e370b..3763a0d6 100644
--- a/ios/chrome/browser/payments/payment_request_picker_row.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_picker_row.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_picker_row.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_row.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/payments/payment_request_picker_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h
similarity index 86%
rename from ios/chrome/browser/payments/payment_request_picker_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h
index 25068d25..aacfa08f 100644
--- a/ios/chrome/browser/payments/payment_request_picker_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -42,4 +42,4 @@
 - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE;
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_PICKER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_request_picker_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_picker_view_controller.mm
similarity index 98%
rename from ios/chrome/browser/payments/payment_request_picker_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_request_picker_view_controller.mm
index 7797702..c565d2b9 100644
--- a/ios/chrome/browser/payments/payment_request_picker_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_picker_view_controller.mm
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_picker_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h"
 
 #import "base/logging.h"
 #import "base/mac/foundation_util.h"
-#import "ios/chrome/browser/payments/payment_request_picker_row.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_row.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/payments/payment_request_selector_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h
similarity index 90%
rename from ios/chrome/browser/payments/payment_request_selector_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h
index 7e9f56a..847c01d 100644
--- a/ios/chrome/browser/payments/payment_request_selector_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -56,4 +56,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_request_selector_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
similarity index 95%
rename from ios/chrome/browser/payments/payment_request_selector_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
index 7017fdc..3d2ee69 100644
--- a/ios/chrome/browser/payments/payment_request_selector_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller.mm
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_actions.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
 #import "ios/chrome/browser/ui/autofill/cells/status_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item+collection_view_controller.h"
@@ -16,6 +13,9 @@
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
 #import "ios/chrome/browser/ui/icons/chrome_icon.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_actions.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/payment_request_selector_view_controller_actions.h b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_actions.h
similarity index 62%
rename from ios/chrome/browser/payments/payment_request_selector_view_controller_actions.h
rename to ios/chrome/browser/ui/payments/payment_request_selector_view_controller_actions.h
index 77cec5f..d3eea90 100644
--- a/ios/chrome/browser/payments/payment_request_selector_view_controller_actions.h
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_actions.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
 
 // Protocol handling the actions sent by the
 // PaymentRequestSelectorViewController.
@@ -14,4 +14,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_ACTIONS_H_
diff --git a/ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h
similarity index 83%
rename from ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h
rename to ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h
index d9d41c4..dc4e3d9 100644
--- a/ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
 
 #import <Foundation/Foundation.h>
 
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
 
 @class CollectionViewItem;
 
@@ -48,4 +48,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_SELECTOR_VIEW_CONTROLLER_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/payments/payment_request_selector_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_unittest.mm
similarity index 94%
rename from ios/chrome/browser/payments/payment_request_selector_view_controller_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_request_selector_view_controller_unittest.mm
index f66b89a..92c3f38 100644
--- a/ios/chrome/browser/payments/payment_request_selector_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_selector_view_controller_unittest.mm
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 
 #include "base/mac/foundation_util.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
 #import "ios/chrome/browser/ui/autofill/cells/status_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/payment_request_view_controller.h b/ios/chrome/browser/ui/payments/payment_request_view_controller.h
similarity index 94%
rename from ios/chrome/browser/payments/payment_request_view_controller.h
rename to ios/chrome/browser/ui/payments/payment_request_view_controller.h
index 4cabe8a..8059894 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller.h
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -105,4 +105,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/payments/payment_request_view_controller.mm b/ios/chrome/browser/ui/payments/payment_request_view_controller.mm
similarity index 97%
rename from ios/chrome/browser/payments/payment_request_view_controller.mm
rename to ios/chrome/browser/ui/payments/payment_request_view_controller.mm
index f1341cc..871623e 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 
@@ -17,14 +17,8 @@
 #include "components/payments/core/currency_formatter.h"
 #include "components/payments/core/strings_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
-#import "ios/chrome/browser/payments/cells/page_info_item.h"
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
-#import "ios/chrome/browser/payments/payment_request_view_controller_actions.h"
 #import "ios/chrome/browser/ui/autofill/cells/status_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
@@ -32,6 +26,12 @@
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/page_info_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_view_controller_actions.h"
 #include "ios/chrome/browser/ui/rtl_geometry.h"
 #include "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/payments/payment_request_view_controller_actions.h b/ios/chrome/browser/ui/payments/payment_request_view_controller_actions.h
similarity index 66%
rename from ios/chrome/browser/payments/payment_request_view_controller_actions.h
rename to ios/chrome/browser/ui/payments/payment_request_view_controller_actions.h
index 6f7f0ea..86e4c1f 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller_actions.h
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller_actions.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
 
 // Protocol handling the actions sent in the PaymentRequestViewController.
 @protocol PaymentRequestViewControllerActions
@@ -16,4 +16,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_PAYMENT_REQUEST_VIEW_CONTROLLER_ACTIONS_H_
diff --git a/ios/chrome/browser/payments/payment_request_view_controller_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
similarity index 95%
rename from ios/chrome/browser/payments/payment_request_view_controller_unittest.mm
rename to ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
index 1e6b9a6..5b4fd27c 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_view_controller_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/payment_request_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_view_controller.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -11,16 +11,16 @@
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
-#import "ios/chrome/browser/payments/cells/page_info_item.h"
-#import "ios/chrome/browser/payments/cells/payment_method_item.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
 #import "ios/chrome/browser/ui/autofill/cells/status_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/page_info_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/payments/shipping_address_selection_coordinator.h b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h
similarity index 82%
rename from ios/chrome/browser/payments/shipping_address_selection_coordinator.h
rename to ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h
index e8757fcf..5c09f97f 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_coordinator.h
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 
 class PaymentRequest;
 
@@ -48,12 +48,12 @@
 
 // The delegate to be notified when the user selects a shipping address or
 // returns without selecting one.
-@property(nonatomic, weak)
-    id<ShippingAddressSelectionCoordinatorDelegate> delegate;
+@property(nonatomic, weak) id<ShippingAddressSelectionCoordinatorDelegate>
+    delegate;
 
 // Stops the spinner and displays the error provided in the payment details.
 - (void)stopSpinnerAndDisplayError;
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
similarity index 94%
rename from ios/chrome/browser/payments/shipping_address_selection_coordinator.mm
rename to ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
index b7291aa..c3143d99d 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.mm
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/shipping_address_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/payments/core/strings_util.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#include "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
-#include "ios/chrome/browser/payments/shipping_address_selection_mediator.h"
+#include "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
+#include "ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/payments/shipping_address_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
similarity index 97%
rename from ios/chrome/browser/payments/shipping_address_selection_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
index 59f825d..f837750 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/shipping_address_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/shipping_address_selection_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -11,8 +11,8 @@
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 #include "third_party/ocmock/OCMock/OCMock.h"
diff --git a/ios/chrome/browser/payments/shipping_address_selection_mediator.h b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h
similarity index 78%
rename from ios/chrome/browser/payments/shipping_address_selection_mediator.h
rename to ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h
index 7ba45aae..a0732d7 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_mediator.h
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 
 class PaymentRequest;
 
@@ -33,4 +33,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_ADDRESS_SELECTION_MEDIATOR_H_
diff --git a/ios/chrome/browser/payments/shipping_address_selection_mediator.mm b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
similarity index 94%
rename from ios/chrome/browser/payments/shipping_address_selection_mediator.mm
rename to ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
index 2421a146..af78a01 100644
--- a/ios/chrome/browser/payments/shipping_address_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_address_selection_mediator.mm
@@ -4,14 +4,14 @@
 
 #include <vector>
 
-#import "ios/chrome/browser/payments/shipping_address_selection_mediator.h"
+#import "ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h"
 
 #include "components/autofill/core/browser/autofill_profile.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/payments/shipping_option_selection_coordinator.h b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h
similarity index 82%
rename from ios/chrome/browser/payments/shipping_option_selection_coordinator.h
rename to ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h
index a04bbca..9d671e9 100644
--- a/ios/chrome/browser/payments/shipping_option_selection_coordinator.h
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
 
 #import <UIKit/UIKit.h>
 #include <vector>
 
 #import "ios/chrome/browser/chrome_coordinator.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 
 class PaymentRequest;
 
@@ -48,12 +48,12 @@
 
 // The delegate to be notified when the user selects a shipping option or
 // returns without selecting one.
-@property(nonatomic, weak)
-    id<ShippingOptionSelectionCoordinatorDelegate> delegate;
+@property(nonatomic, weak) id<ShippingOptionSelectionCoordinatorDelegate>
+    delegate;
 
 // Stops the spinner and displays the error provided in the payment details.
 - (void)stopSpinnerAndDisplayError;
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_COORDINATOR_H_
diff --git a/ios/chrome/browser/payments/shipping_option_selection_coordinator.mm b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.mm
similarity index 96%
rename from ios/chrome/browser/payments/shipping_option_selection_coordinator.mm
rename to ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.mm
index 8776c611..44c1d70 100644
--- a/ios/chrome/browser/payments/shipping_option_selection_coordinator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.mm
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/shipping_option_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h"
 
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/payments/core/strings_util.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_util.h"
-#include "ios/chrome/browser/payments/shipping_option_selection_mediator.h"
+#include "ios/chrome/browser/ui/payments/shipping_option_selection_mediator.h"
 #include "ios/web/public/payments/payment_request.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/payments/shipping_option_selection_coordinator_unittest.mm b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
similarity index 97%
rename from ios/chrome/browser/payments/shipping_option_selection_coordinator_unittest.mm
rename to ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
index 784422c..e3262ca3 100644
--- a/ios/chrome/browser/payments/shipping_option_selection_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_coordinator_unittest.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/payments/shipping_option_selection_coordinator.h"
+#import "ios/chrome/browser/ui/payments/shipping_option_selection_coordinator.h"
 
 #include "base/mac/foundation_util.h"
 #include "base/memory/ptr_util.h"
@@ -11,8 +11,8 @@
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "ios/chrome/browser/payments/payment_request.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
 #include "ios/chrome/browser/payments/payment_request_test_util.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 #include "ios/web/public/payments/payment_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/payments/shipping_option_selection_mediator.h b/ios/chrome/browser/ui/payments/shipping_option_selection_mediator.h
similarity index 78%
rename from ios/chrome/browser/payments/shipping_option_selection_mediator.h
rename to ios/chrome/browser/ui/payments/shipping_option_selection_mediator.h
index 30f6dd91..60eb2337 100644
--- a/ios/chrome/browser/payments/shipping_option_selection_mediator.h
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_mediator.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
+#ifndef IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 
 class PaymentRequest;
 
@@ -33,4 +33,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
+#endif  // IOS_CHROME_BROWSER_UI_PAYMENTS_SHIPPING_OPTION_SELECTION_MEDIATOR_H_
diff --git a/ios/chrome/browser/payments/shipping_option_selection_mediator.mm b/ios/chrome/browser/ui/payments/shipping_option_selection_mediator.mm
similarity index 95%
rename from ios/chrome/browser/payments/shipping_option_selection_mediator.mm
rename to ios/chrome/browser/ui/payments/shipping_option_selection_mediator.mm
index 23fdf97..6bcb1b0 100644
--- a/ios/chrome/browser/payments/shipping_option_selection_mediator.mm
+++ b/ios/chrome/browser/ui/payments/shipping_option_selection_mediator.mm
@@ -4,13 +4,13 @@
 
 #include <vector>
 
-#import "ios/chrome/browser/payments/shipping_option_selection_mediator.h"
+#import "ios/chrome/browser/ui/payments/shipping_option_selection_mediator.h"
 
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/payments/core/currency_formatter.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/payments/payment_request.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
 #include "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #include "ios/web/public/payments/payment_request.h"
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index f3019745..50b02d6 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -114,7 +114,6 @@
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
     "//ios/chrome/browser/passwords",
-    "//ios/chrome/browser/payments/cells",
     "//ios/chrome/browser/physical_web",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/search_engines",
@@ -138,6 +137,7 @@
     "//ios/chrome/browser/ui/icons",
     "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/payments/cells",
     "//ios/chrome/browser/ui/settings/cells",
     "//ios/chrome/browser/ui/settings/utils",
     "//ios/chrome/browser/ui/sync",
@@ -245,7 +245,6 @@
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
     "//ios/chrome/browser/passwords",
-    "//ios/chrome/browser/payments/cells",
     "//ios/chrome/browser/physical_web",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/search_engines",
@@ -269,6 +268,7 @@
     "//ios/chrome/browser/ui/icons",
     "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/payments/cells",
     "//ios/chrome/browser/ui/settings/cells",
     "//ios/chrome/browser/ui/settings/utils",
     "//ios/chrome/browser/ui/sync",
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 a16a34a..ef67730 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
@@ -10,10 +10,6 @@
 #include "components/autofill/core/browser/autofill_data_util.h"
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/grit/components_scaled_resources.h"
-#import "ios/chrome/browser/payments/cells/accepted_payment_methods_item.h"
-#import "ios/chrome/browser/payments/cells/autofill_profile_item.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/cells/price_item.h"
 #import "ios/chrome/browser/ui/authentication/account_control_item.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_item.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h"
@@ -32,6 +28,10 @@
 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_article_item.h"
 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_footer_item.h"
 #import "ios/chrome/browser/ui/icons/chrome_icon.h"
+#import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
+#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/cells/price_item.h"
 #import "ios/chrome/browser/ui/settings/cells/account_signin_item.h"
 #import "ios/chrome/browser/ui/settings/cells/autofill_data_item.h"
 #import "ios/chrome/browser/ui/settings/cells/native_app_item.h"
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index ebe9c3e..49358a0 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -130,7 +130,6 @@
     "//ios/chrome/browser/omaha:unit_tests",
     "//ios/chrome/browser/passwords:unit_tests",
     "//ios/chrome/browser/payments:unit_tests",
-    "//ios/chrome/browser/payments/cells:unit_tests",
     "//ios/chrome/browser/reading_list:unit_tests",
     "//ios/chrome/browser/sessions:unit_tests",
     "//ios/chrome/browser/signin:unit_tests",
@@ -169,6 +168,8 @@
     "//ios/chrome/browser/ui/main:unit_tests",
     "//ios/chrome/browser/ui/ntp:unit_tests",
     "//ios/chrome/browser/ui/omnibox:unit_tests",
+    "//ios/chrome/browser/ui/payments:unit_tests",
+    "//ios/chrome/browser/ui/payments/cells:unit_tests",
     "//ios/chrome/browser/ui/promos:unit_tests",
     "//ios/chrome/browser/ui/reading_list:unit_tests",
     "//ios/chrome/browser/ui/settings:unit_tests",
diff --git a/ios/showcase/payments/BUILD.gn b/ios/showcase/payments/BUILD.gn
index a8a34db..dd19e96 100644
--- a/ios/showcase/payments/BUILD.gn
+++ b/ios/showcase/payments/BUILD.gn
@@ -13,12 +13,12 @@
   ]
   deps = [
     "//base",
-    "//ios/chrome/browser/payments:payments_ui",
-    "//ios/chrome/browser/payments/cells",
     "//ios/chrome/browser/ui/autofill",
     "//ios/chrome/browser/ui/autofill:autofill_ui",
     "//ios/chrome/browser/ui/autofill/cells",
     "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/payments:payments_ui",
+    "//ios/chrome/browser/ui/payments/cells",
     "//ios/chrome/browser/ui/settings/cells",
     "//ios/showcase/common",
   ]
@@ -36,9 +36,9 @@
   deps = [
     "//base",
     "//components/strings",
-    "//ios/chrome/browser/payments:payments_ui",
     "//ios/chrome/browser/ui",
     "//ios/chrome/browser/ui/autofill:autofill_ui",
+    "//ios/chrome/browser/ui/payments:payments_ui",
     "//ios/chrome/browser/ui/settings",
     "//ios/chrome/test/earl_grey:test_support",
     "//ios/showcase/test",
diff --git a/ios/showcase/payments/sc_payments_editor_coordinator.mm b/ios/showcase/payments/sc_payments_editor_coordinator.mm
index f82cdee6..519aed59 100644
--- a/ios/showcase/payments/sc_payments_editor_coordinator.mm
+++ b/ios/showcase/payments/sc_payments_editor_coordinator.mm
@@ -6,13 +6,13 @@
 
 #import "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
-#import "ios/chrome/browser/payments/cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
-#import "ios/chrome/browser/payments/payment_request_editor_field.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
 #import "ios/chrome/browser/ui/autofill/autofill_ui_type_util.h"
 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
 #import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/showcase/payments/sc_payments_editor_egtest.mm b/ios/showcase/payments/sc_payments_editor_egtest.mm
index 95fc87c..c5e711c 100644
--- a/ios/showcase/payments/sc_payments_editor_egtest.mm
+++ b/ios/showcase/payments/sc_payments_editor_egtest.mm
@@ -6,8 +6,8 @@
 
 #import "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/payments/payment_request_edit_view_controller.h"
 #import "ios/chrome/browser/ui/autofill/autofill_edit_accessory_view.h"
+#import "ios/chrome/browser/ui/payments/payment_request_edit_view_controller.h"
 #include "ios/chrome/browser/ui/ui_util.h"
 #import "ios/showcase/test/showcase_eg_utils.h"
 #import "ios/showcase/test/showcase_test_case.h"
diff --git a/ios/showcase/payments/sc_payments_picker_coordinator.mm b/ios/showcase/payments/sc_payments_picker_coordinator.mm
index 26256b5..3beac14 100644
--- a/ios/showcase/payments/sc_payments_picker_coordinator.mm
+++ b/ios/showcase/payments/sc_payments_picker_coordinator.mm
@@ -4,8 +4,8 @@
 
 #import "ios/showcase/payments/sc_payments_picker_coordinator.h"
 
-#import "ios/chrome/browser/payments/payment_request_picker_row.h"
-#import "ios/chrome/browser/payments/payment_request_picker_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_row.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h"
 #import "ios/showcase/common/protocol_alerter.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/showcase/payments/sc_payments_picker_egtest.mm b/ios/showcase/payments/sc_payments_picker_egtest.mm
index 210bf1b2..b13f0bc 100644
--- a/ios/showcase/payments/sc_payments_picker_egtest.mm
+++ b/ios/showcase/payments/sc_payments_picker_egtest.mm
@@ -4,7 +4,7 @@
 
 #import <EarlGrey/EarlGrey.h>
 
-#import "ios/chrome/browser/payments/payment_request_picker_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_picker_view_controller.h"
 #import "ios/showcase/test/showcase_eg_utils.h"
 #import "ios/showcase/test/showcase_test_case.h"
 
diff --git a/ios/showcase/payments/sc_payments_selector_coordinator.mm b/ios/showcase/payments/sc_payments_selector_coordinator.mm
index f543a7b..e0a71ac 100644
--- a/ios/showcase/payments/sc_payments_selector_coordinator.mm
+++ b/ios/showcase/payments/sc_payments_selector_coordinator.mm
@@ -5,11 +5,11 @@
 #import "ios/showcase/payments/sc_payments_selector_coordinator.h"
 
 #include "base/logging.h"
-#import "ios/chrome/browser/payments//cells/payments_text_item.h"
-#import "ios/chrome/browser/payments/cells/payments_has_accessory_type.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller_data_source.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_has_accessory_type.h"
+#import "ios/chrome/browser/ui/payments/cells/payments_text_item.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller_data_source.h"
 #import "ios/showcase/common/protocol_alerter.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/showcase/payments/sc_payments_selector_egtest.mm b/ios/showcase/payments/sc_payments_selector_egtest.mm
index 6dbccc0..64e0dad 100644
--- a/ios/showcase/payments/sc_payments_selector_egtest.mm
+++ b/ios/showcase/payments/sc_payments_selector_egtest.mm
@@ -4,7 +4,7 @@
 
 #import <EarlGrey/EarlGrey.h>
 
-#import "ios/chrome/browser/payments/payment_request_selector_view_controller.h"
+#import "ios/chrome/browser/ui/payments/payment_request_selector_view_controller.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/showcase/test/showcase_eg_utils.h"
 #import "ios/showcase/test/showcase_test_case.h"
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index d06725f..40e19312 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -12910,7 +12910,7 @@
             }
           ],
           "hard_timeout": 900,
-          "shards": 18
+          "shards": 6
         }
       }
     ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests
index 06b890e2..5910cd4 100644
--- a/third_party/WebKit/LayoutTests/NeverFixTests
+++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -271,6 +271,216 @@
 external/wpt/css/css-flexbox-1/interactive/flexbox_interactive_order-transitions.html [ WontFix ]
 external/wpt/css/css-flexbox-1/interactive/flexbox_interactive_paged-overflow-2.html [ WontFix ]
 external/wpt/css/css-flexbox-1/interactive/flexbox_interactive_paged-overflow.html [ WontFix ]
+external/wpt/css/css-ui-3/canvas-cursor-001.html [ WontFix ]
+external/wpt/css/css-ui-3/canvas-cursor-002.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-001.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-002.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-003.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-004.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-005.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-007.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-008.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-010.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-011.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-012.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-014.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-015.html [ WontFix ]
+external/wpt/css/css-ui-3/caret-color-017.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-003.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-004.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-005.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-006.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-007.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-008.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-009.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-010.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-011.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-012.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-013.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-014.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-015.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-016.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-017.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-018.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-019.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-020.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-auto-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-auto-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-auto-003.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-auto-004.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-auto-005.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-border-area.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-box-004.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-box-005.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-box-006.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-box-007.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-content-area.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-hover-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-hover-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-hover-003.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-003.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-004.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-005-nfs.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-005.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-006.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-007.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-008.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-009.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-010.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-011.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-012.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-013.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-014.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-015.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-016.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-017.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-018.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-003.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-004.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-005.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-006.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-007.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-008.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-009.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-010.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-011.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-012.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-013.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-014.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-015.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-016.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-017.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-018.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-019.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-020.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-021.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-022.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-023.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-024.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-025.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-026.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-027.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-028.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-029.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-030.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-031.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-032.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-033.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-034.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-035.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-036.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-037.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-038.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-039.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-040.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-041.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-042.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-image-png-043.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-outline-area.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-padding-area.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-text-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-text-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-x-y-001.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-x-y-002.html [ WontFix ]
+external/wpt/css/css-ui-3/cursor-x-y-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-missing-1.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-missing-2.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-missing-3.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-missing-4.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-dir-target-006.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-000.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-006.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-007.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-008.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-009.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-010.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-011.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-012.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-013.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-014.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-015.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-down-016.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-000.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-006.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-007.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-008.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-009.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-010.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-011.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-012.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-013.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-014.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-015.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-left-016.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-000.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-006.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-007.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-008.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-009.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-010.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-011.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-012.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-013.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-014.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-015.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-right-016.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-000.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-001.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-002.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-003.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-004.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-005.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-006.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-007.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-008.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-009.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-010.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-011.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-012.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-013.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-014.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-015.html [ WontFix ]
+external/wpt/css/css-ui-3/nav-up-016.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-001.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-002.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-003.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-004.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-005.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-006.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-007.html [ WontFix ]
+external/wpt/css/css-ui-3/select-cursor-001-manual.html [ WontFix ]
+external/wpt/css/css-ui-3/text-overflow.html [ WontFix ]
 
 # Temporary disabling of all encrypted-media WPT tests while enabling
 # https only. Once the switch is complete (and the WPT tests renamed so they
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 04dbe54e..2867de9 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -8,7 +8,6 @@
 crbug.com/706118 external/wpt/css/css-shapes-1 [ Skip ]
 crbug.com/706118 external/wpt/css/css-text-3 [ Skip ]
 crbug.com/706118 external/wpt/css/css-text-decor-3 [ Skip ]
-crbug.com/706118 external/wpt/css/css-ui-3 [ Skip ]
 crbug.com/706118 external/wpt/css/css-writing-modes-3 [ Skip ]
 
 # ====== Oilpan-only failures from here ======
@@ -2579,6 +2578,8 @@
 crbug.com/711529 http/tests/permissions/test-api-surface.html [ Timeout ]
 crbug.com/711529 http/tests/permissions/test-query.html [ Timeout ]
 
+crbug.com/713587 external/wpt/css/css-ui-3/caret-color-006.html [ Skip ]
+
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 external/wpt/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html [ Failure ]
@@ -2729,7 +2730,7 @@
 crbug.com/626703 virtual/mojo-localstorage/external/wpt/webstorage/storage_session-manual.html [ Skip ]
 crbug.com/626703 [ Mac ] external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html [ Timeout ]
 #crbug.com/626703 external/wpt/css/css-cascade-4/revert-val-001.html [ Failure ]
-#crbug.com/626703 external/wpt/css/css-ui-3/box-sizing-026.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui-3/box-sizing-026.html [ Failure ]
 crbug.com/626703 external/wpt/content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm [ Timeout ]
 crbug.com/626703 external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html [ Timeout ]
@@ -3275,15 +3276,21 @@
 crbug.com/667371 inspector/elements/styles-1/color-aware-property-value-edit.html [ Pass Failure ]
 
 # [css-ui] Imported tests from W3C suite.
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-014.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-015.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-016.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-018.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-019.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-024.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-025.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/text-overflow-002.html [ Failure ]
-#crbug.com/669473 external/wpt/css/css-ui-3/text-overflow-004.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-014.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-015.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-016.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-018.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-019.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-024.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-025.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-005.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-006.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-013.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-014.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-015.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/outline-016.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/text-overflow-002.html [ Failure ]
+crbug.com/669473 external/wpt/css/css-ui-3/text-overflow-004.html [ Failure ]
 
 crbug.com/670024 external/wpt/webmessaging/broadcastchannel/sandbox.html [ Failure ]
 crbug.com/660384 external/wpt/webmessaging/with-ports/001.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel-expected.txt
new file mode 100644
index 0000000..e0904300
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel-expected.txt
@@ -0,0 +1,30 @@
+This is a testharness.js-based test.
+PASS createDataChannel required arguments 
+PASS createDataChannel with closed connection 
+FAIL createDataChannel defaults assert_equals: maxPacketLifeTime expected (object) null but got (undefined) undefined
+PASS createDataChannel with label "foo" 
+PASS createDataChannel with label null 
+PASS createDataChannel with label undefined 
+PASS createDataChannel with label lone surrogate 
+PASS createDataChannel with ordered false 
+PASS createDataChannel with ordered null/undefined 
+FAIL createDataChannel with maxPacketLifeTime 0 assert_equals: expected (number) 0 but got (undefined) undefined
+PASS createDataChannel with maxRetransmits 0 
+FAIL createDataChannel with both maxPacketLifeTime and maxRetransmits assert_throws: function "() => pc.createDataChannel('', {
+    maxPacketLifeTime: 0,
+    maxRetransmits: 0
+  })" did not throw
+PASS createDataChannel with protocol "foo" 
+PASS createDataChannel with protocol null 
+PASS createDataChannel with protocol undefined 
+PASS createDataChannel with protocol lone surrogate 
+PASS createDataChannel with negotiated true 
+PASS createDataChannel with id -1 
+PASS createDataChannel with id 0 
+PASS createDataChannel with id 1 
+PASS createDataChannel with id 65534 
+FAIL createDataChannel with id 65535 assert_throws: function "() => pc.createDataChannel('', { id: id })" did not throw
+PASS createDataChannel with id 65536 
+FAIL createDataChannel with priority "high" assert_equals: expected (string) "high" but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel.html
new file mode 100644
index 0000000..cb05e2c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createDataChannel.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection createDataChannel method</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+'use strict';
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  assert_equals(pc.createDataChannel.length, 1);
+  assert_throws(new TypeError, () => pc.createDataChannel());
+}, 'createDataChannel required arguments');
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  pc.close();
+  assert_equals(pc.signalingState, 'closed', 'signaling state');
+  assert_throws('InvalidStateError', () => pc.createDataChannel(''));
+}, 'createDataChannel with closed connection');
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('');
+  assert_true(channel instanceof RTCDataChannel, 'is RTCDataChannel');
+  assert_equals(channel.label, '', 'label');
+  assert_equals(channel.ordered, true, 'ordered');
+  assert_equals(channel.maxPacketLifeTime, null, 'maxPacketLifeTime');
+  assert_equals(channel.maxRetransmits, null, 'maxRetransmits');
+  assert_equals(channel.protocol, '', 'protocol');
+  assert_equals(channel.negotiated, false, 'negotiated');
+  // Initial id value is not defined.
+  assert_equals(typeof channel.id, 'number', 'id type');
+  assert_equals(channel.priority, 'low', 'priority');
+}, 'createDataChannel defaults');
+
+const labels = [
+  ['"foo"', 'foo', 'foo'],
+  ['null', null, 'null'],
+  ['undefined', undefined, 'undefined'],
+  ['lone surrogate', '\uD800', '\uFFFD'],
+];
+for (const [description, label, expected] of labels) {
+  test(() => {
+    const pc = new RTCPeerConnection;
+    const channel = pc.createDataChannel(label);
+    assert_equals(channel.label, expected);
+  }, 'createDataChannel with label ' + description);
+}
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('', { ordered: false });
+  assert_equals(channel.ordered, false);
+}, 'createDataChannel with ordered false');
+
+// true as the default value of a boolean is confusing because null is converted
+// to false while undefined is converted to true.
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel1 = pc.createDataChannel('', { ordered: null });
+  assert_equals(channel1.ordered, false);
+  const channel2 = pc.createDataChannel('', { ordered: undefined });
+  assert_equals(channel2.ordered, true);
+}, 'createDataChannel with ordered null/undefined');
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('', { maxPacketLifeTime: 0 });
+  assert_equals(channel.maxPacketLifeTime, 0);
+}, 'createDataChannel with maxPacketLifeTime 0');
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('', { maxRetransmits: 0 });
+  assert_equals(channel.maxRetransmits, 0);
+}, 'createDataChannel with maxRetransmits 0');
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  assert_throws('SyntaxError', () => pc.createDataChannel('', {
+    maxPacketLifeTime: 0,
+    maxRetransmits: 0
+  }));
+}, 'createDataChannel with both maxPacketLifeTime and maxRetransmits');
+
+const protocols = [
+  ['"foo"', 'foo', 'foo'],
+  ['null', null, 'null'],
+  ['undefined', undefined, ''],
+  ['lone surrogate', '\uD800', '\uFFFD'],
+];
+for (const [description, protocol, expected] of protocols) {
+  test(() => {
+    const pc = new RTCPeerConnection;
+    const channel = pc.createDataChannel('', { protocol: protocol });
+    assert_equals(channel.protocol, expected);
+  }, 'createDataChannel with protocol ' + description);
+}
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('', { negotiated: true });
+  assert_equals(channel.negotiated, true);
+}, 'createDataChannel with negotiated true');
+
+// |id| is an unsigned short using [EnforceRange]. Additionally,
+// https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-createdatachannel
+// says: "If id is equal to 65535, which is greater than the maximum allowed ID
+// of 65534 but still qualifies as an unsigned short, throw a TypeError."
+for (const id of [-1, 0, 1, 65534, 65535, 65536]) {
+  test(() => {
+    const pc = new RTCPeerConnection;
+    if (id >= 0 && id <= 65534) {
+      const channel = pc.createDataChannel('', { id: id });
+      assert_equals(channel.id, id);
+    } else {
+      assert_throws(new TypeError, () => pc.createDataChannel('', { id: id }));
+    }
+  }, 'createDataChannel with id ' + id);
+}
+
+test(() => {
+  const pc = new RTCPeerConnection;
+  const channel = pc.createDataChannel('', { priority: "high" });
+  assert_equals(channel.priority, "high");
+}, 'createDataChannel with priority "high"');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
index 3abfcc7..3aa3377 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt
@@ -43,11 +43,9 @@
 PASS new RTCPeerConnection({ iceTransportPolicy: "relay" }) 
 PASS new RTCPeerConnection({ iceTransportPolicy: "all" }) 
 PASS new RTCPeerConnection({ iceTransportPolicy: "invalid" }) 
-FAIL new RTCPeerConnection({ iceTransportPolicy: "none" }) assert_throws: function "function () {
-        eval(expr);
-      }" did not throw
+PASS new RTCPeerConnection({ iceTransportPolicy: "none" }) 
 FAIL new RTCPeerConnection({ iceTransports: "invalid" }) Failed to construct 'RTCPeerConnection': The provided value 'invalid' is not a valid enum value of type RTCIceTransportPolicy.
-PASS new RTCPeerConnection({ iceTransports: "none" }) 
+FAIL new RTCPeerConnection({ iceTransports: "none" }) Failed to construct 'RTCPeerConnection': The provided value 'none' is not a valid enum value of type RTCIceTransportPolicy.
 PASS new RTCPeerConnection({ bundlePolicy: null }) 
 PASS new RTCPeerConnection({ bundlePolicy: undefined }) 
 PASS new RTCPeerConnection({ bundlePolicy: "balanced" }) 
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
index f4fb539..1122418 100644
--- a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-expected.txt
@@ -27,9 +27,13 @@
 PASS new RTCPeerConnection({iceServers:[{url:'foo'}]}); threw exception SyntaxError: Failed to construct 'RTCPeerConnection': 'foo' is not a valid URL..
 PASS new RTCPeerConnection({iceServers:[{urls:'unsupported:scheme'}]}); threw exception SyntaxError: Failed to construct 'RTCPeerConnection': 'unsupported' is not one of the supported URL schemes 'stun', 'turn' or 'turns'..
 PASS new RTCPeerConnection({iceServers:[{urls:[1, 'turn:foo.com']}]}); threw exception SyntaxError: Failed to construct 'RTCPeerConnection': '1' is not a valid URL..
-PASS new RTCPeerConnection({iceServers:[], iceTransports:'none'}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:[], iceTransportPolicy:'relay'}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:[], iceTransportPolicy:'all'}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:[], iceTransportPolicy:'none'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': The provided value 'none' is not a valid enum value of type RTCIceTransportPolicy..
+PASS new RTCPeerConnection({iceServers:[], iceTransportPolicy:'foo'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': The provided value 'foo' is not a valid enum value of type RTCIceTransportPolicy..
 PASS new RTCPeerConnection({iceServers:[], iceTransports:'relay'}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], iceTransports:'all'}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:[], iceTransports:'none'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': The provided value 'none' is not a valid enum value of type RTCIceTransportPolicy..
 PASS new RTCPeerConnection({iceServers:[], iceTransports:'foo'}); threw exception TypeError: Failed to construct 'RTCPeerConnection': The provided value 'foo' is not a valid enum value of type RTCIceTransportPolicy..
 PASS new RTCPeerConnection({iceServers:[], bundlePolicy:'balanced'}); did not throw exception.
 PASS new RTCPeerConnection({iceServers:[], bundlePolicy:'max-bundle'}); did not throw exception.
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
index ca6e7808..d897686 100644
--- a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection.html
@@ -31,9 +31,15 @@
 shouldThrow("new RTCPeerConnection({iceServers:[{urls:'unsupported:scheme'}]});");
 shouldThrow("new RTCPeerConnection({iceServers:[{urls:[1, 'turn:foo.com']}]});");
 
-shouldNotThrow("new RTCPeerConnection({iceServers:[], iceTransports:'none'});");
+shouldNotThrow("new RTCPeerConnection({iceServers:[], iceTransportPolicy:'relay'});");
+shouldNotThrow("new RTCPeerConnection({iceServers:[], iceTransportPolicy:'all'});");
+shouldThrow("new RTCPeerConnection({iceServers:[], iceTransportPolicy:'none'});");
+shouldThrow("new RTCPeerConnection({iceServers:[], iceTransportPolicy:'foo'});");
+
+// TODO(foolip): |iceTransports| is not in the spec.
 shouldNotThrow("new RTCPeerConnection({iceServers:[], iceTransports:'relay'});");
 shouldNotThrow("new RTCPeerConnection({iceServers:[], iceTransports:'all'});");
+shouldThrow("new RTCPeerConnection({iceServers:[], iceTransports:'none'});");
 shouldThrow("new RTCPeerConnection({iceServers:[], iceTransports:'foo'});");
 
 shouldNotThrow("new RTCPeerConnection({iceServers:[], bundlePolicy:'balanced'});");
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/README.md b/third_party/WebKit/LayoutTests/http/tests/streams/README.md
index 94ca80c..0c079963a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/streams/README.md
+++ b/third_party/WebKit/LayoutTests/http/tests/streams/README.md
@@ -1,5 +1,9 @@
 # Streams Tests in Blink
 
-These tests are drawn from those [in the reference implementation](https://github.com/whatwg/streams/tree/master/reference-implementation)'s web-platform-tests subdirectory. Eventually they will be upstreamed to web-platform-tests proper.
+Tests for ReadableStream and WritableStream can be found at
+LayoutTests/external/wpt/streams. Only things specific to Blink are in this
+directory.
 
-Slight modifications have been made in some cases, e.g. to remove references to `pipeTo` and `pipeThrough` since we have not implemented those yet.
+* chromium/ - Tests for functionality specific to Blink.
+* resources/ - Contains rs-utils.js, which is used by stream-related tests in
+  ../fetch.
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/resources/recording-streams.js b/third_party/WebKit/LayoutTests/http/tests/streams/resources/recording-streams.js
deleted file mode 100644
index 9837318d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/streams/resources/recording-streams.js
+++ /dev/null
@@ -1,90 +0,0 @@
-'use strict';
-
-self.recordingReadableStream = (extras = {}, strategy) => {
-  let controllerToCopyOver;
-  const stream = new ReadableStream({
-    start(controller) {
-      controllerToCopyOver = controller;
-
-      if (extras.start) {
-        return extras.start(controller);
-      }
-
-      return undefined;
-    },
-    pull(controller) {
-      stream.events.push('pull');
-
-      if (extras.pull) {
-        return extras.pull(controller);
-      }
-
-      return undefined;
-    },
-    cancel(reason) {
-      stream.events.push('cancel', reason);
-      stream.eventsWithoutPulls.push('cancel', reason);
-
-      if (extras.cancel) {
-        return extras.cancel(reason);
-      }
-
-      return undefined;
-    }
-  }, strategy);
-
-  stream.controller = controllerToCopyOver;
-  stream.events = [];
-  stream.eventsWithoutPulls = [];
-
-  return stream;
-};
-
-self.recordingWritableStream = (extras = {}, strategy) => {
-  let controllerToCopyOver;
-  const stream = new WritableStream({
-    start(controller) {
-      controllerToCopyOver = controller;
-
-      if (extras.start) {
-        return extras.start(controller);
-      }
-
-      return undefined;
-    },
-    write(chunk) {
-      stream.events.push('write', chunk);
-
-      if (extras.write) {
-        return extras.write(chunk);
-      }
-
-      return undefined;
-    },
-    close(...args) {
-      assert_array_equals(args, [controllerToCopyOver], 'close must always be called with the controller');
-
-      stream.events.push('close');
-
-      if (extras.close) {
-        return extras.close();
-      }
-
-      return undefined;
-    },
-    abort(e) {
-      stream.events.push('abort', e);
-
-      if (extras.abort) {
-        return extras.abort(e);
-      }
-
-      return undefined;
-    }
-  }, strategy);
-
-  stream.controller = controllerToCopyOver;
-  stream.events = [];
-
-  return stream;
-};
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-initializer.js b/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-initializer.js
deleted file mode 100644
index d6ed4a7aa..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-initializer.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-
-function worker_test(file) {
-  fetch_tests_from_worker(new Worker(file));
-  if (typeof SharedWorker === 'function') {
-    fetch_tests_from_worker(new SharedWorker(file));
-  } else {
-    test(() => {
-      assert_unreached('SharedWorker is unavailable');
-    }, 'Load ' + file + ' with SharedWorker');
-  }
-  service_worker_test(file);
-}
-
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-utils.js b/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-utils.js
deleted file mode 100644
index 723021e..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/streams/resources/test-utils.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-// This file already exists upstream. We are duplicating and updating it here. Be sure to override the existing one
-// when upstreaming.
-
-self.getterRejects = (t, obj, getterName, target) => {
-  const getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
-
-  return promise_rejects(t, new TypeError(), getter.call(target));
-};
-
-self.methodRejects = (t, obj, methodName, target, args) => {
-  const method = obj[methodName];
-
-  return promise_rejects(t, new TypeError(), method.apply(target, args));
-};
-
-self.getterThrows = (obj, getterName, target) => {
-  const getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
-
-  assert_throws(new TypeError(), () => getter.call(target), getterName + ' should throw a TypeError');
-};
-
-self.methodThrows = (obj, methodName, target, args) => {
-  const method = obj[methodName];
-
-  assert_throws(new TypeError(), () => method.apply(target, args), methodName + ' should throw a TypeError');
-};
-
-self.garbageCollect = () => {
-  if (self.gc) {
-    // Use --expose_gc for V8 (and Node.js)
-    // Exposed in SpiderMonkey shell as well
-    self.gc();
-  } else if (self.GCController) {
-    // Present in some WebKit development environments
-    GCController.collect();
-  } else {
-    /* eslint-disable no-console */
-    console.warn('Tests are running without the ability to do manual garbage collection. They will still work, but ' +
-      'coverage will be suboptimal.');
-    /* eslint-enable no-console */
-  }
-};
-
-self.delay = ms => new Promise(resolve => step_timeout(resolve, ms));
-
-// For tests which verify that the implementation doesn't do something it shouldn't, it's better not to use a
-// timeout. Instead, assume that any reasonable implementation is going to finish work after 2 times around the event
-// loop, and use flushAsyncEvents().then(() => assert_array_equals(...));
-// Some tests include promise resolutions which may mean the test code takes a couple of event loop visits itself. So go
-// around an extra 2 times to avoid complicating those tests.
-// TODO(ricea): Upstream this function to w3c repository.
-self.flushAsyncEvents = () => delay(0).then(() => delay(0)).then(() => delay(0)).then(() => delay(0));
diff --git a/third_party/WebKit/Source/core/dom/Range.cpp b/third_party/WebKit/Source/core/dom/Range.cpp
index 8b7b3c0..76e18fa 100644
--- a/third_party/WebKit/Source/core/dom/Range.cpp
+++ b/third_party/WebKit/Source/core/dom/Range.cpp
@@ -1440,18 +1440,6 @@
   return EndPosition().NodeAsRangePastLastNode();
 }
 
-// TODO(hs1217.lee):: we should move this implement to VisibleUnits and then
-// this function will remove.
-static Vector<IntRect> computeTextRects(const EphemeralRange&);
-
-IntRect Range::BoundingBox() const {
-  IntRect result;
-  const Vector<IntRect>& rects = computeTextRects(EphemeralRange(this));
-  for (const IntRect& rect : rects)
-    result.Unite(rect);
-  return result;
-}
-
 static Vector<IntRect> computeTextRects(const EphemeralRange& range) {
   const Position& start_position = range.StartPosition();
   const Position& end_position = range.EndPosition();
@@ -1476,6 +1464,14 @@
   return rects;
 }
 
+IntRect Range::BoundingBox() const {
+  IntRect result;
+  const Vector<IntRect>& rects = computeTextRects(EphemeralRange(this));
+  for (const IntRect& rect : rects)
+    result.Unite(rect);
+  return result;
+}
+
 void Range::TextQuads(Vector<FloatQuad>& quads,
                       bool use_selection_height) const {
   Node* start_container = &start_.Container();
diff --git a/third_party/WebKit/Source/core/editing/InputMethodController.cpp b/third_party/WebKit/Source/core/editing/InputMethodController.cpp
index cb9ac4b..1d880e51 100644
--- a/third_party/WebKit/Source/core/editing/InputMethodController.cpp
+++ b/third_party/WebKit/Source/core/editing/InputMethodController.cpp
@@ -263,8 +263,25 @@
   return offset;
 }
 
-Element* RootEditableElementOfSelection(const FrameSelection& selection) {
-  return RootEditableElementOf(selection.GetSelectionInDOMTree().Base());
+Element* RootEditableElementOfSelection(const FrameSelection& frameSelection) {
+  const SelectionInDOMTree& selection = frameSelection.GetSelectionInDOMTree();
+  if (selection.IsNone())
+    return nullptr;
+  // To avoid update layout, we attempt to get root editable element from
+  // a position where script/user specified.
+  if (Element* editable = RootEditableElementOf(selection.Base()))
+    return editable;
+
+  // This is work around for applications assumes a position before editable
+  // element as editable[1]
+  // [1] http://crbug.com/712761
+
+  // TODO(editing-dev): Use of updateStyleAndLayoutIgnorePendingStylesheets
+  // needs to be audited. see http://crbug.com/590369 for more details.
+  frameSelection.GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
+  const VisibleSelection& visibleSeleciton =
+      frameSelection.ComputeVisibleSelectionInDOMTree();
+  return RootEditableElementOf(visibleSeleciton.Start());
 }
 
 }  // anonymous namespace
diff --git a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
index f6344efc..7aa2891 100644
--- a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
+++ b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
@@ -1964,4 +1964,18 @@
   EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset());
 }
 
+// For http://crbug.com/712761
+TEST_F(InputMethodControllerTest, TextInputTypeAtBeforeEditable) {
+  GetDocument().body()->setContentEditable("true", ASSERT_NO_EXCEPTION);
+  GetDocument().body()->focus();
+
+  // Set selection before BODY(editable).
+  GetFrame().Selection().SetSelection(
+      SelectionInDOMTree::Builder()
+          .Collapse(Position(GetDocument().documentElement(), 0))
+          .Build());
+
+  EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType());
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
index e6dbcb876..e641fe5 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
@@ -96,10 +96,10 @@
   // covers.
   for (TextIterator marked_text(start, end); !marked_text.AtEnd();
        marked_text.Advance()) {
-    AddMarker(
-        marked_text.CurrentContainer(),
-        DocumentMarker(type, marked_text.StartOffsetInCurrentContainer(),
-                       marked_text.EndOffsetInCurrentContainer(), description));
+    AddMarker(marked_text.CurrentContainer(),
+              new DocumentMarker(
+                  type, marked_text.StartOffsetInCurrentContainer(),
+                  marked_text.EndOffsetInCurrentContainer(), description));
   }
 }
 
@@ -113,9 +113,9 @@
   for (TextIterator marked_text(range.StartPosition(), range.EndPosition());
        !marked_text.AtEnd(); marked_text.Advance()) {
     AddMarker(marked_text.CurrentContainer(),
-              DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
-                             marked_text.EndOffsetInCurrentContainer(),
-                             match_status));
+              new DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
+                                 marked_text.EndOffsetInCurrentContainer(),
+                                 match_status));
   }
   // Don't invalidate tickmarks here. TextFinder invalidates tickmarks using a
   // throttling algorithm. crbug.com/6819.
@@ -129,11 +129,12 @@
   DCHECK(!document_->NeedsLayoutTreeUpdate());
 
   for (TextIterator marked_text(start, end); !marked_text.AtEnd();
-       marked_text.Advance())
+       marked_text.Advance()) {
     AddMarker(marked_text.CurrentContainer(),
-              DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
-                             marked_text.EndOffsetInCurrentContainer(),
-                             underline_color, thick, background_color));
+              new DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
+                                 marked_text.EndOffsetInCurrentContainer(),
+                                 underline_color, thick, background_color));
+  }
 }
 
 void DocumentMarkerController::PrepareForDestruction() {
@@ -189,12 +190,12 @@
 // Markers of the same type do not overlap each other.
 
 void DocumentMarkerController::AddMarker(Node* node,
-                                         const DocumentMarker& new_marker) {
-  DCHECK_GE(new_marker.EndOffset(), new_marker.StartOffset());
-  if (new_marker.EndOffset() == new_marker.StartOffset())
+                                         DocumentMarker* new_marker) {
+  DCHECK_GE(new_marker->EndOffset(), new_marker->StartOffset());
+  if (new_marker->EndOffset() == new_marker->StartOffset())
     return;
 
-  possibly_existing_marker_types_.Add(new_marker.GetType());
+  possibly_existing_marker_types_.Add(new_marker->GetType());
 
   Member<MarkerLists>& markers =
       markers_.insert(node, nullptr).stored_value->value;
@@ -203,12 +204,12 @@
     markers->Grow(DocumentMarker::kMarkerTypeIndexesCount);
   }
 
-  const DocumentMarker::MarkerType new_marker_type = new_marker.GetType();
+  const DocumentMarker::MarkerType new_marker_type = new_marker->GetType();
   if (!ListForType(markers, new_marker_type))
     ListForType(markers, new_marker_type) = new MarkerList;
 
   Member<MarkerList>& list = ListForType(markers, new_marker_type);
-  DocumentMarkerListEditor::AddMarker(list, &new_marker);
+  DocumentMarkerListEditor::AddMarker(list, new_marker);
 
   // repaint the affected node
   if (node->GetLayoutObject()) {
@@ -494,22 +495,11 @@
       continue;
     MarkerLists* markers = node_markers.value;
     for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) {
-      Member<MarkerList>& list = ListForType(markers, type);
+      MarkerList* list = ListForType(markers, type);
       if (!list)
         continue;
-      bool removed_markers = false;
-      for (size_t j = list->size(); j > 0; --j) {
-        const DocumentMarker& marker = *list->at(j - 1);
-
-        const unsigned start = marker.StartOffset();
-        const unsigned length = marker.EndOffset() - marker.StartOffset();
-
-        const String marker_text = ToText(node).data().Substring(start, length);
-        if (words.Contains(marker_text)) {
-          list->erase(j - 1);
-          removed_markers = true;
-        }
-      }
+      bool removed_markers = DocumentMarkerListEditor::RemoveMarkersUnderWords(
+          list, ToText(node).data(), words);
       if (removed_markers && type == DocumentMarker::kTextMatch)
         InvalidatePaintForTickmarks(node);
     }
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
index a2c4a14..817da46 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h
@@ -109,7 +109,7 @@
                               unsigned new_length) final;
 
  private:
-  void AddMarker(Node*, const DocumentMarker&);
+  void AddMarker(Node*, DocumentMarker*);
 
   using MarkerList = HeapVector<Member<RenderedDocumentMarker>>;
   using MarkerLists =
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.cpp
index b26e8e62..72d3b44 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.cpp
@@ -88,6 +88,25 @@
   return doc_dirty;
 }
 
+bool DocumentMarkerListEditor::RemoveMarkersUnderWords(
+    MarkerList* list,
+    const String& node_text,
+    const Vector<String>& words) {
+  bool removed_markers = false;
+  for (size_t j = list->size(); j > 0; --j) {
+    const DocumentMarker& marker = *(*list)[j - 1];
+    const unsigned start = marker.StartOffset();
+    const unsigned length = marker.EndOffset() - marker.StartOffset();
+    const String& marker_text = node_text.Substring(start, length);
+    if (words.Contains(marker_text)) {
+      list->erase(j - 1);
+      removed_markers = true;
+    }
+  }
+
+  return removed_markers;
+}
+
 bool DocumentMarkerListEditor::ShiftMarkers(MarkerList* list,
                                             unsigned offset,
                                             unsigned old_length,
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.h b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.h
index f41907c..72bbecd 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.h
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerListEditor.h
@@ -26,6 +26,11 @@
   // Returns true if a marker was removed, false otherwise.
   static bool RemoveMarkers(MarkerList*, unsigned start_offset, int length);
 
+  // Returns true if a marker was removed, false otherwise.
+  static bool RemoveMarkersUnderWords(MarkerList*,
+                                      const String& node_text,
+                                      const Vector<String>& words);
+
   // Returns true if a marker was shifted or removed, false otherwise.
   static bool ShiftMarkers(MarkerList*,
                            unsigned offset,
diff --git a/third_party/WebKit/Source/core/exported/BUILD.gn b/third_party/WebKit/Source/core/exported/BUILD.gn
index 12a8e62..0ca530df 100644
--- a/third_party/WebKit/Source/core/exported/BUILD.gn
+++ b/third_party/WebKit/Source/core/exported/BUILD.gn
@@ -5,6 +5,8 @@
 
 blink_core_sources("exported") {
   sources = [
+    "WebAssociatedURLLoaderImpl.cpp",
+    "WebAssociatedURLLoaderImpl.h",
     "WebBlob.cpp",
   ]
 }
diff --git a/third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.cpp b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp
similarity index 98%
rename from third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.cpp
rename to third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp
index 8d212a2a..9bdc09d4 100644
--- a/third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.cpp
+++ b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp
@@ -28,11 +28,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "web/WebAssociatedURLLoaderImpl.h"
+#include "core/exported/WebAssociatedURLLoaderImpl.h"
 
 #include <limits.h>
 #include <memory>
 #include "core/dom/ContextLifecycleObserver.h"
+#include "core/dom/Document.h"
 #include "core/dom/TaskRunnerHelper.h"
 #include "core/loader/DocumentThreadableLoader.h"
 #include "core/loader/DocumentThreadableLoaderClient.h"
@@ -53,7 +54,6 @@
 #include "public/platform/WebURLRequest.h"
 #include "public/web/WebAssociatedURLLoaderClient.h"
 #include "public/web/WebDataSource.h"
-#include "web/WebLocalFrameImpl.h"
 
 namespace blink {
 
@@ -337,11 +337,11 @@
 };
 
 WebAssociatedURLLoaderImpl::WebAssociatedURLLoaderImpl(
-    WebLocalFrameImpl* frame_impl,
+    Document* document,
     const WebAssociatedURLLoaderOptions& options)
     : client_(nullptr),
       options_(options),
-      observer_(new Observer(this, frame_impl->GetFrame()->GetDocument())) {}
+      observer_(new Observer(this, document)) {}
 
 WebAssociatedURLLoaderImpl::~WebAssociatedURLLoaderImpl() {
   Cancel();
diff --git a/third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.h b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.h
similarity index 89%
rename from third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.h
rename to third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.h
index 736af87..57bdf34 100644
--- a/third_party/WebKit/Source/web/WebAssociatedURLLoaderImpl.h
+++ b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.h
@@ -6,6 +6,7 @@
 #define WebAssociatedURLLoaderImpl_h
 
 #include <memory>
+#include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
 #include "platform/wtf/Noncopyable.h"
 #include "platform/wtf/RefPtr.h"
@@ -16,15 +17,15 @@
 
 class DocumentThreadableLoader;
 class WebAssociatedURLLoaderClient;
-class WebLocalFrameImpl;
+class Document;
 
 // This class is used to implement WebFrame::createAssociatedURLLoader.
-class WebAssociatedURLLoaderImpl final : public WebAssociatedURLLoader {
+class CORE_EXPORT WebAssociatedURLLoaderImpl final
+    : public WebAssociatedURLLoader {
   WTF_MAKE_NONCOPYABLE(WebAssociatedURLLoaderImpl);
 
  public:
-  WebAssociatedURLLoaderImpl(WebLocalFrameImpl*,
-                             const WebAssociatedURLLoaderOptions&);
+  WebAssociatedURLLoaderImpl(Document*, const WebAssociatedURLLoaderOptions&);
   ~WebAssociatedURLLoaderImpl();
 
   void LoadAsynchronously(const WebURLRequest&,
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index af18514..2cfd1d9 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -241,6 +241,7 @@
   visitor->Trace(auto_size_info_);
   visitor->Trace(children_);
   visitor->Trace(plugins_);
+  visitor->Trace(scrollbars_);
   visitor->Trace(viewport_scrollable_area_);
   visitor->Trace(visibility_observer_);
   visitor->Trace(scroll_anchor_);
@@ -415,8 +416,8 @@
 
   if (has_scrollbar) {
     h_bar_ = CreateScrollbar(kHorizontalScrollbar);
-    scrollable_area_->GetLayoutBox()->GetDocument().View()->AddChild(
-        h_bar_.Get());
+    scrollable_area_->GetLayoutBox()->GetDocument().View()->AddScrollbar(
+        h_bar_);
     h_bar_is_attached_ = 1;
     scrollable_area_->DidAddScrollbar(*h_bar_, kHorizontalScrollbar);
     h_bar_->StyleChanged();
@@ -434,8 +435,8 @@
 
   if (has_scrollbar) {
     v_bar_ = CreateScrollbar(kVerticalScrollbar);
-    scrollable_area_->GetLayoutBox()->GetDocument().View()->AddChild(
-        v_bar_.Get());
+    scrollable_area_->GetLayoutBox()->GetDocument().View()->AddScrollbar(
+        v_bar_);
     v_bar_is_attached_ = 1;
     scrollable_area_->DidAddScrollbar(*v_bar_, kVerticalScrollbar);
     v_bar_->StyleChanged();
@@ -473,8 +474,8 @@
     return;
 
   scrollable_area_->WillRemoveScrollbar(*scrollbar, orientation);
-  scrollable_area_->GetLayoutBox()->GetDocument().View()->RemoveChild(
-      scrollbar.Get());
+  scrollable_area_->GetLayoutBox()->GetDocument().View()->RemoveScrollbar(
+      scrollbar);
   scrollbar->DisconnectFromScrollableArea();
   scrollbar = nullptr;
 }
@@ -506,12 +507,14 @@
     if (frame_view_base->IsFrameView()) {
       ToFrameView(frame_view_base)
           ->InvalidateAllCustomScrollbarsOnActiveChanged();
-    } else if (uses_window_inactive_selector &&
-               frame_view_base->IsScrollbar() &&
-               ToScrollbar(frame_view_base)->IsCustomScrollbar()) {
-      ToScrollbar(frame_view_base)->StyleChanged();
     }
   }
+
+  for (const Member<Scrollbar>& scrollbar : *Scrollbars()) {
+    if (uses_window_inactive_selector && scrollbar->IsCustomScrollbar())
+      scrollbar->StyleChanged();
+  }
+
   if (uses_window_inactive_selector)
     RecalculateCustomScrollbarStyle();
 }
@@ -3625,9 +3628,6 @@
 
 IntPoint FrameView::ConvertSelfToChild(const FrameViewBase* child,
                                        const IntPoint& point) const {
-  // TODO(joelhockey): Remove this check once Scrollbar no longer inherits from
-  // FrameViewBase.
-  DCHECK(!IsFrameViewScrollbar(child));
   IntPoint new_point = point;
   new_point = FrameToContents(point);
   new_point.MoveBy(-child->Location());
@@ -3859,6 +3859,18 @@
   plugins_.insert(plugin);
 }
 
+void FrameView::RemoveScrollbar(Scrollbar* scrollbar) {
+  DCHECK(scrollbars_.Contains(scrollbar));
+  scrollbar->SetParent(nullptr);
+  scrollbars_.erase(scrollbar);
+}
+
+void FrameView::AddScrollbar(Scrollbar* scrollbar) {
+  DCHECK(!scrollbars_.Contains(scrollbar));
+  scrollbar->SetParent(this);
+  scrollbars_.insert(scrollbar);
+}
+
 bool FrameView::VisualViewportSuppliesScrollbars() {
   // On desktop, we always use the layout viewport's scrollbars.
   if (!frame_->GetSettings() || !frame_->GetSettings()->GetViewportEnabled() ||
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h
index 9e35832127..061869d 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.h
+++ b/third_party/WebKit/Source/core/frame/FrameView.h
@@ -471,6 +471,7 @@
 
   typedef HeapHashSet<Member<FrameViewBase>> ChildrenSet;
   typedef HeapHashSet<Member<PluginView>> PluginsSet;
+  typedef HeapHashSet<Member<Scrollbar>> ScrollbarsSet;
 
   // Functions for child manipulation and inspection.
   void SetParent(FrameViewBase*) override;
@@ -480,6 +481,9 @@
   void RemovePlugin(PluginView*);
   void AddPlugin(PluginView*);
   const PluginsSet* Plugins() const { return &plugins_; }
+  void RemoveScrollbar(Scrollbar*);
+  void AddScrollbar(Scrollbar*);
+  const ScrollbarsSet* Scrollbars() const { return &scrollbars_; }
 
   // If the scroll view does not use a native widget, then it will have
   // cross-platform Scrollbars. These functions can be used to obtain those
@@ -1002,10 +1006,6 @@
   void AdjustScrollOffsetFromUpdateScrollbars();
   bool VisualViewportSuppliesScrollbars();
 
-  bool IsFrameViewScrollbar(const FrameViewBase* child) const {
-    return HorizontalScrollbar() == child || VerticalScrollbar() == child;
-  }
-
   ScrollingCoordinator* GetScrollingCoordinator() const;
 
   void PrepareLayoutAnalyzer();
@@ -1125,6 +1125,7 @@
 
   ChildrenSet children_;
   PluginsSet plugins_;
+  ScrollbarsSet scrollbars_;
 
   ScrollOffset pending_scroll_delta_;
   ScrollOffset scroll_offset_;
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 04af508..635004d 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1269,7 +1269,6 @@
     kLoopbackEmbeddedInSecureContext = 1652,
     kLoopbackEmbeddedInNonSecureContext = 1653,
     kBlinkMacSystemFont = 1654,
-    kRTCConfigurationIceTransportsNone = 1655,
     kRTCIceServerURL = 1656,
     kRTCIceServerURLs = 1657,
     kOffscreenCanvasTransferToImageBitmap2D = 1658,
@@ -1277,7 +1276,6 @@
     kOffscreenCanvasCommit2D = 1660,
     kOffscreenCanvasCommitWebGL = 1661,
     kRTCConfigurationIceTransportPolicy = 1662,
-    kRTCConfigurationIceTransportPolicyNone = 1663,
     kRTCConfigurationIceTransports = 1664,
     kDocumentFullscreenElementInV0Shadow = 1665,
     kScriptWithCSPBypassingSchemeParserInserted = 1666,
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
index eb87d62..c5b7eed 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
@@ -356,22 +356,22 @@
     ContentSecurityPolicyHeaderSource source) {
   size_t previous_policy_count = policies_.size();
   AddPolicyFromHeaderValue(header, type, source);
+  // Notify about the new header, so that it can be reported back to the
+  // browser process.  This is needed in order to:
+  // 1) replicate CSP directives (i.e. frame-src) to OOPIFs (only for now /
+  // short-term).
+  // 2) enforce CSP in the browser process (long-term - see
+  // https://crbug.com/376522).
+  // TODO(arthursonzogni): policies are actually replicated (1) and some of
+  // them are enforced on the browser process (2). Stop doing (1) when (2) is
+  // finished.
+  WebVector<WebContentSecurityPolicy> policies(policies_.size() -
+                                               previous_policy_count);
+  for (size_t i = previous_policy_count; i < policies_.size(); ++i) {
+    policies[i - previous_policy_count] =
+        policies_[i]->ExposeForNavigationalChecks();
+  }
   if (GetDocument() && GetDocument()->GetFrame()) {
-    // Notify about the new header, so that it can be reported back to the
-    // browser process.  This is needed in order to:
-    // 1) replicate CSP directives (i.e. frame-src) to OOPIFs (only for now /
-    // short-term).
-    // 2) enforce CSP in the browser process (long-term - see
-    // https://crbug.com/376522).
-    // TODO(arthursonzogni): policies are actually replicated (1) and some of
-    // them are enforced on the browser process (2). Stop doing (1) when (2) is
-    // finished.
-    WebVector<WebContentSecurityPolicy> policies(policies_.size() -
-                                                 previous_policy_count);
-    for (size_t i = previous_policy_count; i < policies_.size(); ++i) {
-      policies[i - previous_policy_count] =
-          policies_[i]->ExposeForNavigationalChecks();
-    }
     GetDocument()->GetFrame()->Client()->DidAddContentSecurityPolicies(
         policies);
   }
@@ -1213,12 +1213,6 @@
     const SecurityPolicyViolationEventInit& violation_data,
     LocalFrame* context_frame,
     const Vector<String>& report_endpoints) {
-  // TODO(mkwst): Support POSTing violation reports from a Worker.
-  Document* document =
-      context_frame ? context_frame->GetDocument() : this->GetDocument();
-  if (!document)
-    return;
-
   // We need to be careful here when deciding what information to send to the
   // report-uri. Currently, we send only the current document's URL and the
   // directive that was violated. The document's URL is safe to send because
@@ -1263,13 +1257,19 @@
   if (ShouldSendViolationReport(stringified_report)) {
     DidSendViolationReport(stringified_report);
 
-    RefPtr<EncodedFormData> report =
-        EncodedFormData::Create(stringified_report.Utf8());
+    // TODO(mkwst): Support POSTing violation reports from a Worker.
+    Document* document =
+        context_frame ? context_frame->GetDocument() : this->GetDocument();
+    if (!document)
+      return;
 
     LocalFrame* frame = document->GetFrame();
     if (!frame)
       return;
 
+    RefPtr<EncodedFormData> report =
+        EncodedFormData::Create(stringified_report.Utf8());
+
     for (const String& endpoint : report_endpoints) {
       // If we have a context frame we're dealing with 'frame-ancestors' and we
       // don't have our own execution context. Use the frame's document to
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
index d266c21..3474cee 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
@@ -435,9 +435,9 @@
   FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceInline);
   FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceSinglePolicy);
   FRIEND_TEST_ALL_PREFIXES(ContentSecurityPolicyTest, NonceMultiplePolicy);
-  FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest,
+  FRIEND_TEST_ALL_PREFIXES(BaseFetchContextTest,
                            RedirectChecksReportedAndEnforcedCSP);
-  FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest,
+  FRIEND_TEST_ALL_PREFIXES(BaseFetchContextTest,
                            AllowResponseChecksReportedAndEnforcedCSP);
   FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest,
                            PopulateResourceRequestChecksReportOnlyCSP);
diff --git a/third_party/WebKit/Source/core/loader/BaseFetchContext.cpp b/third_party/WebKit/Source/core/loader/BaseFetchContext.cpp
index 9b38def1..ae92738 100644
--- a/third_party/WebKit/Source/core/loader/BaseFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/BaseFetchContext.cpp
@@ -4,8 +4,18 @@
 
 #include "core/loader/BaseFetchContext.h"
 
-#include "core/frame/csp/ContentSecurityPolicy.h"
+#include "core/dom/ExecutionContext.h"
+#include "core/frame/ContentSettingsClient.h"
+#include "core/frame/Settings.h"
 #include "core/inspector/ConsoleMessage.h"
+#include "core/loader/SubresourceFilter.h"
+#include "core/loader/private/FrameClientHintsPreferencesContext.h"
+#include "platform/exported/WrappedResourceRequest.h"
+#include "platform/loader/fetch/FetchInitiatorTypeNames.h"
+#include "platform/loader/fetch/Resource.h"
+#include "platform/loader/fetch/ResourceLoadPriority.h"
+#include "platform/loader/fetch/ResourceLoadingLog.h"
+#include "platform/weborigin/SchemeRegistry.h"
 #include "platform/weborigin/SecurityPolicy.h"
 
 namespace blink {
@@ -43,6 +53,63 @@
   return execution_context_ ? execution_context_->GetSecurityOrigin() : nullptr;
 }
 
+ResourceRequestBlockedReason BaseFetchContext::CanRequest(
+    Resource::Type type,
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    const ResourceLoaderOptions& options,
+    SecurityViolationReportingPolicy reporting_policy,
+    FetchParameters::OriginRestriction origin_restriction) const {
+  ResourceRequestBlockedReason blocked_reason = CanRequestInternal(
+      type, resource_request, url, options, reporting_policy,
+      origin_restriction, resource_request.GetRedirectStatus());
+  if (blocked_reason != ResourceRequestBlockedReason::kNone &&
+      reporting_policy == SecurityViolationReportingPolicy::kReport) {
+    DispatchDidBlockRequest(resource_request, options.initiator_info,
+                            blocked_reason);
+  }
+  return blocked_reason;
+}
+
+ResourceRequestBlockedReason BaseFetchContext::CanFollowRedirect(
+    Resource::Type type,
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    const ResourceLoaderOptions& options,
+    SecurityViolationReportingPolicy reporting_policy,
+    FetchParameters::OriginRestriction origin_restriction) const {
+  // CanRequestInternal checks enforced CSP, so check report-only here to ensure
+  // that violations are sent.
+  CheckCSPForRequest(resource_request, url, options, reporting_policy,
+                     RedirectStatus::kFollowedRedirect,
+                     ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly);
+  return CanRequest(type, resource_request, url, options, reporting_policy,
+                    origin_restriction);
+}
+
+ResourceRequestBlockedReason BaseFetchContext::AllowResponse(
+    Resource::Type type,
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    const ResourceLoaderOptions& options) const {
+  // CanRequestInternal only checks enforced policies: check report-only here
+  // to ensure violations are sent.
+  CheckCSPForRequest(resource_request, url, options,
+                     SecurityViolationReportingPolicy::kReport,
+                     RedirectStatus::kFollowedRedirect,
+                     ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly);
+  ResourceRequestBlockedReason blocked_reason =
+      CanRequestInternal(type, resource_request, url, options,
+                         SecurityViolationReportingPolicy::kReport,
+                         FetchParameters::kUseDefaultOriginRestrictionForType,
+                         RedirectStatus::kFollowedRedirect);
+  if (blocked_reason != ResourceRequestBlockedReason::kNone) {
+    DispatchDidBlockRequest(resource_request, options.initiator_info,
+                            blocked_reason);
+  }
+  return blocked_reason;
+}
+
 void BaseFetchContext::PrintAccessDeniedMessage(const KURL& url) const {
   if (url.IsNull())
     return;
@@ -78,6 +145,175 @@
     request.AddHTTPHeaderField("CSP", "active");
 }
 
+ResourceRequestBlockedReason BaseFetchContext::CheckCSPForRequest(
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    const ResourceLoaderOptions& options,
+    SecurityViolationReportingPolicy reporting_policy,
+    ResourceRequest::RedirectStatus redirect_status,
+    ContentSecurityPolicy::CheckHeaderType check_header_type) const {
+  if (ShouldBypassMainWorldCSP() || options.content_security_policy_option ==
+                                        kDoNotCheckContentSecurityPolicy) {
+    return ResourceRequestBlockedReason::kNone;
+  }
+
+  if (execution_context_) {
+    DCHECK(execution_context_->GetContentSecurityPolicy());
+    if (!execution_context_->GetContentSecurityPolicy()->AllowRequest(
+            resource_request.GetRequestContext(), url,
+            options.content_security_policy_nonce, options.integrity_metadata,
+            options.parser_disposition, redirect_status, reporting_policy,
+            check_header_type))
+      return ResourceRequestBlockedReason::CSP;
+  }
+  return ResourceRequestBlockedReason::kNone;
+}
+
+ResourceRequestBlockedReason BaseFetchContext::CanRequestInternal(
+    Resource::Type type,
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    const ResourceLoaderOptions& options,
+    SecurityViolationReportingPolicy reporting_policy,
+    FetchParameters::OriginRestriction origin_restriction,
+    ResourceRequest::RedirectStatus redirect_status) const {
+  if (ShouldBlockRequestByInspector(resource_request))
+    return ResourceRequestBlockedReason::kInspector;
+
+  SecurityOrigin* security_origin = options.security_origin.Get();
+  if (!security_origin && execution_context_)
+    security_origin = execution_context_->GetSecurityOrigin();
+
+  if (origin_restriction != FetchParameters::kNoOriginRestriction &&
+      security_origin && !security_origin->CanDisplay(url)) {
+    if (reporting_policy == SecurityViolationReportingPolicy::kReport)
+      ReportLocalLoadFailed(url);
+    RESOURCE_LOADING_DVLOG(1) << "ResourceFetcher::requestResource URL was not "
+                                 "allowed by SecurityOrigin::CanDisplay";
+    return ResourceRequestBlockedReason::kOther;
+  }
+
+  // Some types of resources can be loaded only from the same origin. Other
+  // types of resources, like Images, Scripts, and CSS, can be loaded from
+  // any URL.
+  switch (type) {
+    case Resource::kMainResource:
+    case Resource::kImage:
+    case Resource::kCSSStyleSheet:
+    case Resource::kScript:
+    case Resource::kFont:
+    case Resource::kRaw:
+    case Resource::kLinkPrefetch:
+    case Resource::kTextTrack:
+    case Resource::kImportResource:
+    case Resource::kMedia:
+    case Resource::kManifest:
+    case Resource::kMock:
+      // By default these types of resources can be loaded from any origin.
+      // FIXME: Are we sure about Resource::kFont?
+      if (origin_restriction == FetchParameters::kRestrictToSameOrigin &&
+          !security_origin->CanRequest(url)) {
+        PrintAccessDeniedMessage(url);
+        return ResourceRequestBlockedReason::kOrigin;
+      }
+      break;
+    case Resource::kXSLStyleSheet:
+      DCHECK(RuntimeEnabledFeatures::xsltEnabled());
+    case Resource::kSVGDocument:
+      if (!security_origin->CanRequest(url)) {
+        PrintAccessDeniedMessage(url);
+        return ResourceRequestBlockedReason::kOrigin;
+      }
+      break;
+  }
+
+  // We check the 'report-only' headers before upgrading the request (in
+  // populateResourceRequest). We check the enforced headers here to ensure we
+  // block things we ought to block.
+  if (CheckCSPForRequest(
+          resource_request, url, options, reporting_policy, redirect_status,
+          ContentSecurityPolicy::CheckHeaderType::kCheckEnforce) ==
+      ResourceRequestBlockedReason::CSP) {
+    return ResourceRequestBlockedReason::CSP;
+  }
+
+  if (type == Resource::kScript || type == Resource::kImportResource) {
+    if (GetContentSettingsClient() &&
+        !GetContentSettingsClient()->AllowScriptFromSource(
+            !GetSettings() || GetSettings()->GetScriptEnabled(), url)) {
+      GetContentSettingsClient()->DidNotAllowScript();
+      // TODO(estark): Use a different ResourceRequestBlockedReason here, since
+      // this check has nothing to do with CSP. https://crbug.com/600795
+      return ResourceRequestBlockedReason::CSP;
+    }
+  }
+
+  // SVG Images have unique security rules that prevent all subresource requests
+  // except for data urls.
+  if (type != Resource::kMainResource && IsSVGImageChromeClient() &&
+      !url.ProtocolIsData())
+    return ResourceRequestBlockedReason::kOrigin;
+
+  // Measure the number of legacy URL schemes ('ftp://') and the number of
+  // embedded-credential ('http://user:password@...') resources embedded as
+  // subresources.
+  if (resource_request.GetFrameType() != WebURLRequest::kFrameTypeTopLevel) {
+    if (GetMainResourceSecurityContext() &&
+        SchemeRegistry::ShouldTreatURLSchemeAsLegacy(url.Protocol()) &&
+        !SchemeRegistry::ShouldTreatURLSchemeAsLegacy(
+            GetMainResourceSecurityContext()
+                ->GetSecurityOrigin()
+                ->Protocol())) {
+      CountDeprecation(UseCounter::kLegacyProtocolEmbeddedAsSubresource);
+
+      // TODO(mkwst): Enabled by default in M59. Drop the runtime-enabled check
+      // in M60: https://www.chromestatus.com/feature/5709390967472128
+      if (RuntimeEnabledFeatures::blockLegacySubresourcesEnabled())
+        return ResourceRequestBlockedReason::kOrigin;
+    }
+
+    if ((!url.User().IsEmpty() || !url.Pass().IsEmpty()) &&
+        resource_request.GetRequestContext() !=
+            WebURLRequest::kRequestContextXMLHttpRequest) {
+      CountDeprecation(
+          UseCounter::kRequestedSubresourceWithEmbeddedCredentials);
+      // TODO(mkwst): Remove the runtime-enabled check in M59:
+      // https://www.chromestatus.com/feature/5669008342777856
+      if (RuntimeEnabledFeatures::blockCredentialedSubresourcesEnabled())
+        return ResourceRequestBlockedReason::kOrigin;
+    }
+  }
+
+  // Check for mixed content. We do this second-to-last so that when folks block
+  // mixed content with a CSP policy, they don't get a warning. They'll still
+  // get a warning in the console about CSP blocking the load.
+  if (ShouldBlockFetchByMixedContentCheck(resource_request, url,
+                                          reporting_policy))
+    return ResourceRequestBlockedReason::kMixedContent;
+
+  if (url.WhitespaceRemoved()) {
+    CountDeprecation(UseCounter::kCanRequestURLHTTPContainingNewline);
+    if (url.ProtocolIsInHTTPFamily()) {
+      if (RuntimeEnabledFeatures::restrictCanRequestURLCharacterSetEnabled())
+        return ResourceRequestBlockedReason::kOther;
+    } else {
+      CountUsage(UseCounter::kCanRequestURLNonHTTPContainingNewline);
+    }
+  }
+
+  // Let the client have the final say into whether or not the load should
+  // proceed.
+  if (GetSubresourceFilter() && type != Resource::kMainResource &&
+      type != Resource::kImportResource) {
+    if (!GetSubresourceFilter()->AllowLoad(
+            url, resource_request.GetRequestContext(), reporting_policy)) {
+      return ResourceRequestBlockedReason::kSubresourceFilter;
+    }
+  }
+
+  return ResourceRequestBlockedReason::kNone;
+}
+
 DEFINE_TRACE(BaseFetchContext) {
   visitor->Trace(execution_context_);
   FetchContext::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/loader/BaseFetchContext.h b/third_party/WebKit/Source/core/loader/BaseFetchContext.h
index 724233fe..ad4dfbc 100644
--- a/third_party/WebKit/Source/core/loader/BaseFetchContext.h
+++ b/third_party/WebKit/Source/core/loader/BaseFetchContext.h
@@ -6,13 +6,22 @@
 #define BaseFetchContext_h
 
 #include "core/CoreExport.h"
-#include "core/dom/ExecutionContext.h"
+#include "core/frame/UseCounter.h"
+#include "core/frame/csp/ContentSecurityPolicy.h"
 #include "platform/heap/Handle.h"
 #include "platform/loader/fetch/FetchContext.h"
 #include "platform/loader/fetch/ResourceRequest.h"
 
 namespace blink {
 
+class ContentSettingsClient;
+class ExecutionContext;
+class SecurityContext;
+class Settings;
+class SubresourceFilter;
+
+// A core-level implementaiton of FetchContext that does not depend on
+// Frame. This class provides basic default implementation for some methods.
 class CORE_EXPORT BaseFetchContext : public FetchContext {
  public:
   explicit BaseFetchContext(ExecutionContext*);
@@ -20,13 +29,77 @@
 
   void AddAdditionalRequestHeaders(ResourceRequest&,
                                    FetchResourceType) override;
+  ResourceRequestBlockedReason CanRequest(
+      Resource::Type,
+      const ResourceRequest&,
+      const KURL&,
+      const ResourceLoaderOptions&,
+      SecurityViolationReportingPolicy,
+      FetchParameters::OriginRestriction) const override;
+  ResourceRequestBlockedReason CanFollowRedirect(
+      Resource::Type,
+      const ResourceRequest&,
+      const KURL&,
+      const ResourceLoaderOptions&,
+      SecurityViolationReportingPolicy,
+      FetchParameters::OriginRestriction) const override;
+  ResourceRequestBlockedReason AllowResponse(
+      Resource::Type,
+      const ResourceRequest&,
+      const KURL&,
+      const ResourceLoaderOptions&) const override;
   SecurityOrigin* GetSecurityOrigin() const override;
 
   DECLARE_VIRTUAL_TRACE();
 
  protected:
+  // Used for security checks. It is valid that they return nullptr,
+  // while returning nullptr may result in disable some security checks.
+  virtual ContentSettingsClient* GetContentSettingsClient() const = 0;
+  virtual Settings* GetSettings() const = 0;
+  virtual SubresourceFilter* GetSubresourceFilter() const = 0;
+  virtual SecurityContext* GetMainResourceSecurityContext() const = 0;
+
+  // Note: subclasses are expected to override following methods.
+  // Used in the default implementation for CanRequest, CanFollowRedirect
+  // and AllowResponse.
+  virtual bool ShouldBlockRequestByInspector(const ResourceRequest&) const = 0;
+  virtual void DispatchDidBlockRequest(const ResourceRequest&,
+                                       const FetchInitiatorInfo&,
+                                       ResourceRequestBlockedReason) const = 0;
+  // TODO(kinuko): Consider implementing this on ExecutionContext and
+  // remove this virtual method.
+  virtual void ReportLocalLoadFailed(const KURL&) const = 0;
+  virtual bool ShouldBypassMainWorldCSP() const = 0;
+  virtual bool IsSVGImageChromeClient() const = 0;
+  virtual void CountUsage(UseCounter::Feature) const = 0;
+  virtual void CountDeprecation(UseCounter::Feature) const = 0;
+  virtual bool ShouldBlockFetchByMixedContentCheck(
+      const ResourceRequest&,
+      const KURL&,
+      SecurityViolationReportingPolicy) const = 0;
+
+  // Utility method that can be used to implement other methods.
   void PrintAccessDeniedMessage(const KURL&) const;
   void AddCSPHeaderIfNecessary(Resource::Type, ResourceRequest&);
+  ResourceRequestBlockedReason CheckCSPForRequest(
+      const ResourceRequest&,
+      const KURL&,
+      const ResourceLoaderOptions&,
+      SecurityViolationReportingPolicy,
+      ResourceRequest::RedirectStatus,
+      ContentSecurityPolicy::CheckHeaderType) const;
+
+  // Utility methods that are used in default implement for CanRequest,
+  // CanFollowRedirect and AllowResponse.
+  ResourceRequestBlockedReason CanRequestInternal(
+      Resource::Type,
+      const ResourceRequest&,
+      const KURL&,
+      const ResourceLoaderOptions&,
+      SecurityViolationReportingPolicy,
+      FetchParameters::OriginRestriction,
+      ResourceRequest::RedirectStatus) const;
 
   // FIXME: Oilpan: Ideally this should just be a traced Member but that will
   // currently leak because ComputedStyle and its data are not on the heap.
diff --git a/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp
index 93b79ae..2e2411c 100644
--- a/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp
+++ b/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp
@@ -37,11 +37,47 @@
 
 namespace blink {
 
+class MockBaseFetchContext final : public BaseFetchContext {
+ public:
+  explicit MockBaseFetchContext(ExecutionContext* execution_context)
+      : BaseFetchContext(execution_context) {}
+  ~MockBaseFetchContext() override {}
+
+  // BaseFetchContext overrides:
+  ContentSettingsClient* GetContentSettingsClient() const override {
+    return nullptr;
+  }
+  Settings* GetSettings() const override { return nullptr; }
+  SubresourceFilter* GetSubresourceFilter() const override { return nullptr; }
+  SecurityContext* GetMainResourceSecurityContext() const override {
+    return nullptr;
+  }
+  bool ShouldBlockRequestByInspector(const ResourceRequest&) const override {
+    return false;
+  }
+  void DispatchDidBlockRequest(const ResourceRequest&,
+                               const FetchInitiatorInfo&,
+                               ResourceRequestBlockedReason) const override {}
+  void ReportLocalLoadFailed(const KURL&) const override {}
+  bool ShouldBypassMainWorldCSP() const override { return false; }
+  bool IsSVGImageChromeClient() const override { return false; }
+  void CountUsage(UseCounter::Feature) const override {}
+  void CountDeprecation(UseCounter::Feature) const override {}
+  bool ShouldBlockFetchByMixedContentCheck(
+      const ResourceRequest&,
+      const KURL&,
+      SecurityViolationReportingPolicy) const override {
+    return false;
+  }
+};
+
 class BaseFetchContextTest : public ::testing::Test {
  protected:
   void SetUp() override {
     execution_context_ = new NullExecutionContext();
-    fetch_context_ = new BaseFetchContext(execution_context_);
+    static_cast<NullExecutionContext*>(execution_context_.Get())
+        ->SetUpSecurityContext();
+    fetch_context_ = new MockBaseFetchContext(execution_context_);
   }
 
   Persistent<ExecutionContext> execution_context_;
@@ -183,4 +219,46 @@
   }
 }
 
+// Tests that CanFollowRedirect() checks both report-only and enforced CSP
+// headers.
+TEST_F(BaseFetchContextTest, RedirectChecksReportedAndEnforcedCSP) {
+  ContentSecurityPolicy* policy =
+      execution_context_->GetContentSecurityPolicy();
+  policy->DidReceiveHeader("script-src https://foo.test",
+                           kContentSecurityPolicyHeaderTypeEnforce,
+                           kContentSecurityPolicyHeaderSourceHTTP);
+  policy->DidReceiveHeader("script-src https://bar.test",
+                           kContentSecurityPolicyHeaderTypeReport,
+                           kContentSecurityPolicyHeaderSourceHTTP);
+  KURL url(KURL(), "http://baz.test");
+  ResourceRequest resource_request(url);
+  resource_request.SetRequestContext(WebURLRequest::kRequestContextScript);
+  EXPECT_EQ(
+      ResourceRequestBlockedReason::CSP,
+      fetch_context_->CanFollowRedirect(
+          Resource::kScript, resource_request, url, ResourceLoaderOptions(),
+          SecurityViolationReportingPolicy::kReport,
+          FetchParameters::kUseDefaultOriginRestrictionForType));
+  EXPECT_EQ(2u, policy->violation_reports_sent_.size());
+}
+
+// Tests that AllowResponse() checks both report-only and enforced CSP headers.
+TEST_F(BaseFetchContextTest, AllowResponseChecksReportedAndEnforcedCSP) {
+  ContentSecurityPolicy* policy =
+      execution_context_->GetContentSecurityPolicy();
+  policy->DidReceiveHeader("script-src https://foo.test",
+                           kContentSecurityPolicyHeaderTypeEnforce,
+                           kContentSecurityPolicyHeaderSourceHTTP);
+  policy->DidReceiveHeader("script-src https://bar.test",
+                           kContentSecurityPolicyHeaderTypeReport,
+                           kContentSecurityPolicyHeaderSourceHTTP);
+  KURL url(KURL(), "http://baz.test");
+  ResourceRequest resource_request(url);
+  resource_request.SetRequestContext(WebURLRequest::kRequestContextScript);
+  EXPECT_EQ(ResourceRequestBlockedReason::CSP,
+            fetch_context_->AllowResponse(Resource::kScript, resource_request,
+                                          url, ResourceLoaderOptions()));
+  EXPECT_EQ(2u, policy->violation_reports_sent_.size());
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
index 295d433..8471c7f 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -337,10 +337,6 @@
   return GetFrame()->Client();
 }
 
-ContentSettingsClient* FrameFetchContext::GetContentSettingsClient() const {
-  return GetFrame()->GetContentSettingsClient();
-}
-
 void FrameFetchContext::AddAdditionalRequestHeaders(ResourceRequest& request,
                                                     FetchResourceType type) {
   BaseFetchContext::AddAdditionalRequestHeaders(request, type);
@@ -637,244 +633,6 @@
   return GetContentSettingsClient()->AllowImage(images_enabled, url);
 }
 
-ResourceRequestBlockedReason FrameFetchContext::CanRequest(
-    Resource::Type type,
-    const ResourceRequest& resource_request,
-    const KURL& url,
-    const ResourceLoaderOptions& options,
-    SecurityViolationReportingPolicy reporting_policy,
-    FetchParameters::OriginRestriction origin_restriction) const {
-  ResourceRequestBlockedReason blocked_reason = CanRequestInternal(
-      type, resource_request, url, options, reporting_policy,
-      origin_restriction, resource_request.GetRedirectStatus());
-  if (blocked_reason != ResourceRequestBlockedReason::kNone &&
-      reporting_policy == SecurityViolationReportingPolicy::kReport) {
-    probe::didBlockRequest(GetFrame(), resource_request, MasterDocumentLoader(),
-                           options.initiator_info, blocked_reason);
-  }
-  return blocked_reason;
-}
-
-ResourceRequestBlockedReason FrameFetchContext::CanFollowRedirect(
-    Resource::Type type,
-    const ResourceRequest& resource_request,
-    const KURL& url,
-    const ResourceLoaderOptions& options,
-    SecurityViolationReportingPolicy reporting_policy,
-    FetchParameters::OriginRestriction origin_restriction) const {
-  // CanRequestInternal checks enforced CSP, so check report-only here to ensure
-  // that violations are sent.
-  CheckCSPForRequest(resource_request, url, options, reporting_policy,
-                     RedirectStatus::kFollowedRedirect,
-                     ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly);
-  return CanRequest(type, resource_request, url, options, reporting_policy,
-                    origin_restriction);
-}
-
-ResourceRequestBlockedReason FrameFetchContext::AllowResponse(
-    Resource::Type type,
-    const ResourceRequest& resource_request,
-    const KURL& url,
-    const ResourceLoaderOptions& options) const {
-  // canRequestInternal only checks enforced policies: check report-only here
-  // to ensure violations are sent.
-  CheckCSPForRequest(resource_request, url, options,
-                     SecurityViolationReportingPolicy::kReport,
-                     RedirectStatus::kFollowedRedirect,
-                     ContentSecurityPolicy::CheckHeaderType::kCheckReportOnly);
-  ResourceRequestBlockedReason blocked_reason =
-      CanRequestInternal(type, resource_request, url, options,
-                         SecurityViolationReportingPolicy::kReport,
-                         FetchParameters::kUseDefaultOriginRestrictionForType,
-                         RedirectStatus::kFollowedRedirect);
-  if (blocked_reason != ResourceRequestBlockedReason::kNone) {
-    probe::didBlockRequest(GetFrame(), resource_request, MasterDocumentLoader(),
-                           options.initiator_info, blocked_reason);
-  }
-  return blocked_reason;
-}
-
-ResourceRequestBlockedReason FrameFetchContext::CanRequestInternal(
-    Resource::Type type,
-    const ResourceRequest& resource_request,
-    const KURL& url,
-    const ResourceLoaderOptions& options,
-    SecurityViolationReportingPolicy reporting_policy,
-    FetchParameters::OriginRestriction origin_restriction,
-    ResourceRequest::RedirectStatus redirect_status) const {
-  bool should_block_request = false;
-  probe::shouldBlockRequest(GetFrame(), resource_request,
-                            &should_block_request);
-  if (should_block_request)
-    return ResourceRequestBlockedReason::kInspector;
-
-  SecurityOrigin* security_origin = options.security_origin.Get();
-  if (!security_origin && execution_context_)
-    security_origin = execution_context_->GetSecurityOrigin();
-
-  if (origin_restriction != FetchParameters::kNoOriginRestriction &&
-      security_origin && !security_origin->CanDisplay(url)) {
-    if (reporting_policy == SecurityViolationReportingPolicy::kReport)
-      FrameLoader::ReportLocalLoadFailed(GetFrame(), url.ElidedString());
-    RESOURCE_LOADING_DVLOG(1) << "ResourceFetcher::requestResource URL was not "
-                                 "allowed by SecurityOrigin::canDisplay";
-    return ResourceRequestBlockedReason::kOther;
-  }
-
-  // Some types of resources can be loaded only from the same origin. Other
-  // types of resources, like Images, Scripts, and CSS, can be loaded from
-  // any URL.
-  switch (type) {
-    case Resource::kMainResource:
-    case Resource::kImage:
-    case Resource::kCSSStyleSheet:
-    case Resource::kScript:
-    case Resource::kFont:
-    case Resource::kRaw:
-    case Resource::kLinkPrefetch:
-    case Resource::kTextTrack:
-    case Resource::kImportResource:
-    case Resource::kMedia:
-    case Resource::kManifest:
-    case Resource::kMock:
-      // By default these types of resources can be loaded from any origin.
-      // FIXME: Are we sure about Resource::Font?
-      if (origin_restriction == FetchParameters::kRestrictToSameOrigin &&
-          !security_origin->CanRequest(url)) {
-        PrintAccessDeniedMessage(url);
-        return ResourceRequestBlockedReason::kOrigin;
-      }
-      break;
-    case Resource::kXSLStyleSheet:
-      DCHECK(RuntimeEnabledFeatures::xsltEnabled());
-    case Resource::kSVGDocument:
-      if (!security_origin->CanRequest(url)) {
-        PrintAccessDeniedMessage(url);
-        return ResourceRequestBlockedReason::kOrigin;
-      }
-      break;
-  }
-
-  // We check the 'report-only' headers before upgrading the request (in
-  // populateResourceRequest). We check the enforced headers here to ensure we
-  // block things we ought to block.
-  if (CheckCSPForRequest(
-          resource_request, url, options, reporting_policy, redirect_status,
-          ContentSecurityPolicy::CheckHeaderType::kCheckEnforce) ==
-      ResourceRequestBlockedReason::CSP) {
-    return ResourceRequestBlockedReason::CSP;
-  }
-
-  if (type == Resource::kScript || type == Resource::kImportResource) {
-    DCHECK(GetFrame());
-    if (!GetContentSettingsClient()->AllowScriptFromSource(
-            !GetFrame()->GetSettings() ||
-                GetFrame()->GetSettings()->GetScriptEnabled(),
-            url)) {
-      GetContentSettingsClient()->DidNotAllowScript();
-      // TODO(estark): Use a different ResourceRequestBlockedReason here, since
-      // this check has nothing to do with CSP. https://crbug.com/600795
-      return ResourceRequestBlockedReason::CSP;
-    }
-  }
-
-  // SVG Images have unique security rules that prevent all subresource requests
-  // except for data urls.
-  if (type != Resource::kMainResource &&
-      GetFrame()->GetChromeClient().IsSVGImageChromeClient() &&
-      !url.ProtocolIsData())
-    return ResourceRequestBlockedReason::kOrigin;
-
-  // Measure the number of legacy URL schemes ('ftp://') and the number of
-  // embedded-credential ('http://user:password@...') resources embedded as
-  // subresources.
-  if (resource_request.GetFrameType() != WebURLRequest::kFrameTypeTopLevel) {
-    DCHECK(GetFrame()->GetDocument());
-    if (SchemeRegistry::ShouldTreatURLSchemeAsLegacy(url.Protocol()) &&
-        !SchemeRegistry::ShouldTreatURLSchemeAsLegacy(
-            GetFrame()->GetDocument()->GetSecurityOrigin()->Protocol())) {
-      Deprecation::CountDeprecation(
-          GetFrame()->GetDocument(),
-          UseCounter::kLegacyProtocolEmbeddedAsSubresource);
-
-      // TODO(mkwst): Enabled by default in M59. Drop the runtime-enabled check
-      // in M60: https://www.chromestatus.com/feature/5709390967472128
-      if (RuntimeEnabledFeatures::blockLegacySubresourcesEnabled())
-        return ResourceRequestBlockedReason::kOrigin;
-    }
-
-    if ((!url.User().IsEmpty() || !url.Pass().IsEmpty()) &&
-        resource_request.GetRequestContext() !=
-            WebURLRequest::kRequestContextXMLHttpRequest) {
-      Deprecation::CountDeprecation(
-          GetFrame()->GetDocument(),
-          UseCounter::kRequestedSubresourceWithEmbeddedCredentials);
-      // TODO(mkwst): Remove the runtime-enabled check in M59:
-      // https://www.chromestatus.com/feature/5669008342777856
-      if (RuntimeEnabledFeatures::blockCredentialedSubresourcesEnabled())
-        return ResourceRequestBlockedReason::kOrigin;
-    }
-  }
-
-  // Check for mixed content. We do this second-to-last so that when folks block
-  // mixed content with a CSP policy, they don't get a warning. They'll still
-  // get a warning in the console about CSP blocking the load.
-  if (MixedContentChecker::ShouldBlockFetch(GetFrame(), resource_request, url,
-                                            reporting_policy))
-    return ResourceRequestBlockedReason::kMixedContent;
-
-  if (url.WhitespaceRemoved()) {
-    Deprecation::CountDeprecation(
-        GetFrame()->GetDocument(),
-        UseCounter::kCanRequestURLHTTPContainingNewline);
-    if (url.ProtocolIsInHTTPFamily()) {
-      if (RuntimeEnabledFeatures::restrictCanRequestURLCharacterSetEnabled())
-        return ResourceRequestBlockedReason::kOther;
-    } else {
-      UseCounter::Count(GetFrame()->GetDocument(),
-                        UseCounter::kCanRequestURLNonHTTPContainingNewline);
-    }
-  }
-
-  // Let the client have the final say into whether or not the load should
-  // proceed.
-  DocumentLoader* document_loader = MasterDocumentLoader();
-  if (document_loader && document_loader->GetSubresourceFilter() &&
-      type != Resource::kMainResource && type != Resource::kImportResource) {
-    if (!document_loader->GetSubresourceFilter()->AllowLoad(
-            url, resource_request.GetRequestContext(), reporting_policy)) {
-      return ResourceRequestBlockedReason::kSubresourceFilter;
-    }
-  }
-
-  return ResourceRequestBlockedReason::kNone;
-}
-
-ResourceRequestBlockedReason FrameFetchContext::CheckCSPForRequest(
-    const ResourceRequest& resource_request,
-    const KURL& url,
-    const ResourceLoaderOptions& options,
-    SecurityViolationReportingPolicy reporting_policy,
-    ResourceRequest::RedirectStatus redirect_status,
-    ContentSecurityPolicy::CheckHeaderType check_header_type) const {
-  if (GetFrame()->GetScriptController().ShouldBypassMainWorldCSP() ||
-      options.content_security_policy_option ==
-          kDoNotCheckContentSecurityPolicy) {
-    return ResourceRequestBlockedReason::kNone;
-  }
-
-  if (execution_context_) {
-    DCHECK(execution_context_->GetContentSecurityPolicy());
-    if (!execution_context_->GetContentSecurityPolicy()->AllowRequest(
-            resource_request.GetRequestContext(), url,
-            options.content_security_policy_nonce, options.integrity_metadata,
-            options.parser_disposition, redirect_status, reporting_policy,
-            check_header_type))
-      return ResourceRequestBlockedReason::CSP;
-  }
-  return ResourceRequestBlockedReason::kNone;
-}
-
 bool FrameFetchContext::IsControlledByServiceWorker() const {
   DCHECK(MasterDocumentLoader());
 
@@ -1082,6 +840,69 @@
   return GetFrame()->FrameScheduler()->LoadingTaskRunner();
 }
 
+ContentSettingsClient* FrameFetchContext::GetContentSettingsClient() const {
+  return GetFrame()->GetContentSettingsClient();
+}
+
+Settings* FrameFetchContext::GetSettings() const {
+  DCHECK(GetFrame());
+  return GetFrame()->GetSettings();
+}
+
+SubresourceFilter* FrameFetchContext::GetSubresourceFilter() const {
+  DocumentLoader* document_loader = MasterDocumentLoader();
+  return document_loader ? document_loader->GetSubresourceFilter() : nullptr;
+}
+
+SecurityContext* FrameFetchContext::GetMainResourceSecurityContext() const {
+  DCHECK(GetFrame()->GetDocument());
+  return GetFrame()->GetDocument();
+}
+
+bool FrameFetchContext::ShouldBlockRequestByInspector(
+    const ResourceRequest& resource_request) const {
+  bool should_block_request = false;
+  probe::shouldBlockRequest(GetFrame(), resource_request,
+                            &should_block_request);
+  return should_block_request;
+}
+
+void FrameFetchContext::DispatchDidBlockRequest(
+    const ResourceRequest& resource_request,
+    const FetchInitiatorInfo& fetch_initiator_info,
+    ResourceRequestBlockedReason blocked_reason) const {
+  probe::didBlockRequest(GetFrame(), resource_request, MasterDocumentLoader(),
+                         fetch_initiator_info, blocked_reason);
+}
+
+void FrameFetchContext::ReportLocalLoadFailed(const KURL& url) const {
+  FrameLoader::ReportLocalLoadFailed(GetFrame(), url.ElidedString());
+}
+
+bool FrameFetchContext::ShouldBypassMainWorldCSP() const {
+  return GetFrame()->GetScriptController().ShouldBypassMainWorldCSP();
+}
+
+bool FrameFetchContext::IsSVGImageChromeClient() const {
+  return GetFrame()->GetChromeClient().IsSVGImageChromeClient();
+}
+
+void FrameFetchContext::CountUsage(UseCounter::Feature feature) const {
+  UseCounter::Count(GetFrame()->GetDocument(), feature);
+}
+
+void FrameFetchContext::CountDeprecation(UseCounter::Feature feature) const {
+  Deprecation::CountDeprecation(GetFrame()->GetDocument(), feature);
+}
+
+bool FrameFetchContext::ShouldBlockFetchByMixedContentCheck(
+    const ResourceRequest& resource_request,
+    const KURL& url,
+    SecurityViolationReportingPolicy reporting_policy) const {
+  return MixedContentChecker::ShouldBlockFetch(GetFrame(), resource_request,
+                                               url, reporting_policy);
+}
+
 DEFINE_TRACE(FrameFetchContext) {
   visitor->Trace(document_loader_);
   BaseFetchContext::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.h b/third_party/WebKit/Source/core/loader/FrameFetchContext.h
index 6f43e8b..9f81a50 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.h
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.h
@@ -118,26 +118,6 @@
 
   void AddResourceTiming(const ResourceTimingInfo&) override;
   bool AllowImage(bool images_enabled, const KURL&) const override;
-  ResourceRequestBlockedReason CanRequest(
-      Resource::Type,
-      const ResourceRequest&,
-      const KURL&,
-      const ResourceLoaderOptions&,
-      SecurityViolationReportingPolicy,
-      FetchParameters::OriginRestriction) const override;
-  ResourceRequestBlockedReason CanFollowRedirect(
-      Resource::Type,
-      const ResourceRequest&,
-      const KURL&,
-      const ResourceLoaderOptions&,
-      SecurityViolationReportingPolicy,
-      FetchParameters::OriginRestriction) const override;
-  ResourceRequestBlockedReason AllowResponse(
-      Resource::Type,
-      const ResourceRequest&,
-      const KURL&,
-      const ResourceLoaderOptions&) const override;
-
   bool IsControlledByServiceWorker() const override;
   int64_t ServiceWorkerID() const override;
 
@@ -186,27 +166,26 @@
   Document* GetDocument() const;
   LocalFrame* GetFrame() const;
   LocalFrameClient* GetLocalFrameClient() const;
-
-  ContentSettingsClient* GetContentSettingsClient() const;
-
   LocalFrame* FrameOfImportsController() const;
 
-  ResourceRequestBlockedReason CanRequestInternal(
-      Resource::Type,
+  // BaseFetchContext overrides:
+  ContentSettingsClient* GetContentSettingsClient() const override;
+  Settings* GetSettings() const override;
+  SubresourceFilter* GetSubresourceFilter() const override;
+  SecurityContext* GetMainResourceSecurityContext() const override;
+  bool ShouldBlockRequestByInspector(const ResourceRequest&) const override;
+  void DispatchDidBlockRequest(const ResourceRequest&,
+                               const FetchInitiatorInfo&,
+                               ResourceRequestBlockedReason) const override;
+  void ReportLocalLoadFailed(const KURL&) const override;
+  bool ShouldBypassMainWorldCSP() const override;
+  bool IsSVGImageChromeClient() const override;
+  void CountUsage(UseCounter::Feature) const override;
+  void CountDeprecation(UseCounter::Feature) const override;
+  bool ShouldBlockFetchByMixedContentCheck(
       const ResourceRequest&,
       const KURL&,
-      const ResourceLoaderOptions&,
-      SecurityViolationReportingPolicy,
-      FetchParameters::OriginRestriction,
-      ResourceRequest::RedirectStatus) const;
-
-  ResourceRequestBlockedReason CheckCSPForRequest(
-      const ResourceRequest&,
-      const KURL&,
-      const ResourceLoaderOptions&,
-      SecurityViolationReportingPolicy,
-      ResourceRequest::RedirectStatus,
-      ContentSecurityPolicy::CheckHeaderType) const;
+      SecurityViolationReportingPolicy) const override;
 
   Member<DocumentLoader> document_loader_;
 };
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
index 3d65c243..c520331 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -469,46 +469,6 @@
   }
 }
 
-// Tests that CanFollowRedirect() checks both report-only and enforced CSP
-// headers.
-TEST_F(FrameFetchContextTest, RedirectChecksReportedAndEnforcedCSP) {
-  ContentSecurityPolicy* policy = document->GetContentSecurityPolicy();
-  policy->DidReceiveHeader("script-src https://foo.test",
-                           kContentSecurityPolicyHeaderTypeEnforce,
-                           kContentSecurityPolicyHeaderSourceHTTP);
-  policy->DidReceiveHeader("script-src https://bar.test",
-                           kContentSecurityPolicyHeaderTypeReport,
-                           kContentSecurityPolicyHeaderSourceHTTP);
-  KURL url(KURL(), "http://baz.test");
-  ResourceRequest resource_request(url);
-  resource_request.SetRequestContext(WebURLRequest::kRequestContextScript);
-  EXPECT_EQ(
-      ResourceRequestBlockedReason::CSP,
-      fetch_context->CanFollowRedirect(
-          Resource::kScript, resource_request, url, ResourceLoaderOptions(),
-          SecurityViolationReportingPolicy::kReport,
-          FetchParameters::kUseDefaultOriginRestrictionForType));
-  EXPECT_EQ(2u, policy->violation_reports_sent_.size());
-}
-
-// Tests that AllowResponse() checks both report-only and enforced CSP headers.
-TEST_F(FrameFetchContextTest, AllowResponseChecksReportedAndEnforcedCSP) {
-  ContentSecurityPolicy* policy = document->GetContentSecurityPolicy();
-  policy->DidReceiveHeader("script-src https://foo.test",
-                           kContentSecurityPolicyHeaderTypeEnforce,
-                           kContentSecurityPolicyHeaderSourceHTTP);
-  policy->DidReceiveHeader("script-src https://bar.test",
-                           kContentSecurityPolicyHeaderTypeReport,
-                           kContentSecurityPolicyHeaderSourceHTTP);
-  KURL url(KURL(), "http://baz.test");
-  ResourceRequest resource_request(url);
-  resource_request.SetRequestContext(WebURLRequest::kRequestContextScript);
-  EXPECT_EQ(ResourceRequestBlockedReason::CSP,
-            fetch_context->AllowResponse(Resource::kScript, resource_request,
-                                         url, ResourceLoaderOptions()));
-  EXPECT_EQ(2u, policy->violation_reports_sent_.size());
-}
-
 // Tests that PopulateResourceRequest() checks report-only CSP headers, so that
 // any violations are reported before the request is modified.
 TEST_F(FrameFetchContextTest, PopulateResourceRequestChecksReportOnlyCSP) {
diff --git a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp
index 0b490d6..4b38f38e 100644
--- a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp
+++ b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp
@@ -5,7 +5,6 @@
 #include "core/loader/SubresourceFilter.h"
 
 #include "core/dom/TaskRunnerHelper.h"
-#include "core/loader/DocumentLoader.h"
 #include "platform/WebTaskRunner.h"
 #include "platform/weborigin/KURL.h"
 #include "public/platform/WebTraceLocation.h"
diff --git a/third_party/WebKit/Source/core/loader/SubresourceFilter.h b/third_party/WebKit/Source/core/loader/SubresourceFilter.h
index 1a6edd5..2910719 100644
--- a/third_party/WebKit/Source/core/loader/SubresourceFilter.h
+++ b/third_party/WebKit/Source/core/loader/SubresourceFilter.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "core/CoreExport.h"
+#include "core/loader/DocumentLoader.h"
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/SecurityViolationReportingPolicy.h"
 #include "public/platform/WebDocumentSubresourceFilter.h"
@@ -15,7 +16,6 @@
 
 namespace blink {
 
-class DocumentLoader;
 class KURL;
 
 // Wrapper around a WebDocumentSubresourceFilter. This class will make it easier
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index a8cd0c3..23d1185d 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -1991,7 +1991,7 @@
         ScrollableArea(), orientation, scrollbar_size,
         &ScrollableArea()->Box().GetFrame()->GetPage()->GetChromeClient());
   }
-  ScrollableArea()->Box().GetDocument().View()->AddChild(scrollbar);
+  ScrollableArea()->Box().GetDocument().View()->AddScrollbar(scrollbar);
   return scrollbar;
 }
 
@@ -2013,7 +2013,7 @@
   if (!scrollbar->IsCustomScrollbar())
     ScrollableArea()->WillRemoveScrollbar(*scrollbar, orientation);
 
-  ToFrameView(scrollbar->Parent())->RemoveChild(scrollbar.Get());
+  ScrollableArea()->Box().GetDocument().View()->RemoveScrollbar(scrollbar);
   scrollbar->DisconnectFromScrollableArea();
   scrollbar = nullptr;
 }
diff --git a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
index 0fcbbe4..edd4f3f9 100644
--- a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
+++ b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
@@ -7,6 +7,7 @@
 #include "core/dom/ExecutionContextTask.h"
 #include "core/events/Event.h"
 #include "core/frame/DOMTimer.h"
+#include "core/frame/csp/ContentSecurityPolicy.h"
 
 namespace blink {
 
@@ -45,4 +46,11 @@
   return is_secure_context_;
 }
 
+void NullExecutionContext::SetUpSecurityContext() {
+  ContentSecurityPolicy* policy = ContentSecurityPolicy::Create();
+  SecurityContext::SetSecurityOrigin(SecurityOrigin::Create(dummy_url_));
+  policy->BindToExecutionContext(this);
+  SecurityContext::SetContentSecurityPolicy(policy);
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/testing/NullExecutionContext.h b/third_party/WebKit/Source/core/testing/NullExecutionContext.h
index 1118449f2..e59db9a 100644
--- a/third_party/WebKit/Source/core/testing/NullExecutionContext.h
+++ b/third_party/WebKit/Source/core/testing/NullExecutionContext.h
@@ -52,6 +52,8 @@
       String& error_message,
       const SecureContextCheck = kStandardSecureContextCheck) const override;
 
+  void SetUpSecurityContext();
+
   DEFINE_INLINE_TRACE() {
     visitor->Trace(queue_);
     SecurityContext::Trace(visitor);
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
index f74ae06..23b5eba 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -1352,15 +1352,24 @@
     : public CanvasRenderingContext2DTest {
  protected:
   void SetUp() override {
+    platform_ = WTF::MakeUnique<ScopedTestingPlatformSupport<
+        TestingPlatformSupportWithMockScheduler>>();
     override_settings_function_ = &OverrideScriptEnabled;
-    platform_->AdvanceClockSeconds(1.);  // For non-zero DocumentParserTimings.
+    (*platform_)
+        ->AdvanceClockSeconds(1.);  // For non-zero DocumentParserTimings.
     CanvasRenderingContext2DTest::SetUp();
     GetDocument().View()->UpdateLayout();
   }
 
-  void RunUntilIdle() { platform_->RunUntilIdle(); }
+  void TearDown() override {
+    platform_.reset();
+    CanvasRenderingContext2DTest::TearDown();
+  }
 
-  ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
+  void RunUntilIdle() { (*platform_)->RunUntilIdle(); }
+
+  std::unique_ptr<
+      ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>>
       platform_;
 };
 
@@ -1406,6 +1415,7 @@
                                               false);
   EXPECT_EQ(!!CANVAS2D_HIBERNATION_ENABLED,
             layer->NeedsCompositingInputsUpdate());
+  RunUntilIdle();  // Clear task queue.
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/modules_idl_files.gni b/third_party/WebKit/Source/modules/modules_idl_files.gni
index de2bc0b..21ae131 100644
--- a/third_party/WebKit/Source/modules/modules_idl_files.gni
+++ b/third_party/WebKit/Source/modules/modules_idl_files.gni
@@ -497,6 +497,7 @@
                     "peerconnection/RTCConfiguration.idl",
                     "peerconnection/RTCDataChannelEventInit.idl",
                     "peerconnection/RTCDTMFToneChangeEventInit.idl",
+                    "peerconnection/RTCDataChannelInit.idl",
                     "peerconnection/RTCIceCandidateInit.idl",
                     "peerconnection/RTCIceServer.idl",
                     "peerconnection/RTCOfferAnswerOptions.idl",
@@ -898,6 +899,8 @@
   "$blink_modules_output_dir/peerconnection/RTCDataChannelEventInit.h",
   "$blink_modules_output_dir/peerconnection/RTCDTMFToneChangeEventInit.cpp",
   "$blink_modules_output_dir/peerconnection/RTCDTMFToneChangeEventInit.h",
+  "$blink_modules_output_dir/peerconnection/RTCDataChannelInit.cpp",
+  "$blink_modules_output_dir/peerconnection/RTCDataChannelInit.h",
   "$blink_modules_output_dir/peerconnection/RTCIceCandidateInit.cpp",
   "$blink_modules_output_dir/peerconnection/RTCIceCandidateInit.h",
   "$blink_modules_output_dir/peerconnection/RTCIceServer.cpp",
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl b/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
index 40b94d7..3daa5c3 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCConfiguration.idl
@@ -4,10 +4,7 @@
 
 // https://w3c.github.io/webrtc-pc/#rtcicetransportpolicy-enum
 
-// TODO(foolip): The spec does not have the "none" value.
-// https://crbug.com/659134
 enum RTCIceTransportPolicy {
-    "none",
     "relay",
     "all"
 };
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCDataChannelInit.idl b/third_party/WebKit/Source/modules/peerconnection/RTCDataChannelInit.idl
new file mode 100644
index 0000000..6ecbe841
--- /dev/null
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCDataChannelInit.idl
@@ -0,0 +1,16 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelinit
+
+dictionary RTCDataChannelInit {
+    boolean ordered = true;
+    // TODO(guidou): Rename |maxRetransmitTime| to |maxPacketLifeTime|.
+    // https://crbug.com/696681
+    unsigned short maxRetransmitTime;
+    unsigned short maxRetransmits;
+    USVString protocol = "";
+    boolean negotiated = false;
+    [EnforceRange] unsigned short id;
+};
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
index ce87c6f..f48a69e 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp
@@ -64,6 +64,7 @@
 #include "modules/peerconnection/RTCDTMFSender.h"
 #include "modules/peerconnection/RTCDataChannel.h"
 #include "modules/peerconnection/RTCDataChannelEvent.h"
+#include "modules/peerconnection/RTCDataChannelInit.h"
 #include "modules/peerconnection/RTCIceServer.h"
 #include "modules/peerconnection/RTCOfferOptions.h"
 #include "modules/peerconnection/RTCPeerConnectionErrorCallback.h"
@@ -223,8 +224,6 @@
 };
 
 WebRTCIceTransportPolicy IceTransportPolicyFromString(const String& policy) {
-  if (policy == "none")
-    return WebRTCIceTransportPolicy::kNone;
   if (policy == "relay")
     return WebRTCIceTransportPolicy::kRelay;
   DCHECK_EQ(policy, "all");
@@ -242,17 +241,10 @@
     UseCounter::Count(context, UseCounter::kRTCConfigurationIceTransportPolicy);
     ice_transport_policy =
         IceTransportPolicyFromString(configuration.iceTransportPolicy());
-    if (ice_transport_policy == WebRTCIceTransportPolicy::kNone) {
-      UseCounter::Count(context,
-                        UseCounter::kRTCConfigurationIceTransportPolicyNone);
-    }
   } else if (configuration.hasIceTransports()) {
     UseCounter::Count(context, UseCounter::kRTCConfigurationIceTransports);
     ice_transport_policy =
         IceTransportPolicyFromString(configuration.iceTransports());
-    if (ice_transport_policy == WebRTCIceTransportPolicy::kNone)
-      UseCounter::Count(context,
-                        UseCounter::kRTCConfigurationIceTransportsNone);
   }
 
   WebRTCBundlePolicy bundle_policy = WebRTCBundlePolicy::kBalanced;
@@ -1214,34 +1206,29 @@
 RTCDataChannel* RTCPeerConnection::createDataChannel(
     ScriptState* script_state,
     String label,
-    const Dictionary& options,
+    const RTCDataChannelInit& data_channel_dict,
     ExceptionState& exception_state) {
   if (ThrowExceptionIfSignalingStateClosed(signaling_state_, exception_state))
     return nullptr;
 
   WebRTCDataChannelInit init;
-  DictionaryHelper::Get(options, "ordered", init.ordered);
-  DictionaryHelper::Get(options, "negotiated", init.negotiated);
-
-  unsigned short value = 0;
+  init.ordered = data_channel_dict.ordered();
   ExecutionContext* context = ExecutionContext::From(script_state);
-  if (DictionaryHelper::Get(options, "id", value))
-    init.id = value;
-  if (DictionaryHelper::Get(options, "maxRetransmits", value)) {
-    UseCounter::Count(
-        context, UseCounter::kRTCPeerConnectionCreateDataChannelMaxRetransmits);
-    init.max_retransmits = value;
-  }
-  if (DictionaryHelper::Get(options, "maxRetransmitTime", value)) {
+  if (data_channel_dict.hasMaxRetransmitTime()) {
     UseCounter::Count(
         context,
         UseCounter::kRTCPeerConnectionCreateDataChannelMaxRetransmitTime);
-    init.max_retransmit_time = value;
+    init.max_retransmit_time = data_channel_dict.maxRetransmitTime();
   }
-
-  String protocol_string;
-  DictionaryHelper::Get(options, "protocol", protocol_string);
-  init.protocol = protocol_string;
+  if (data_channel_dict.hasMaxRetransmits()) {
+    UseCounter::Count(
+        context, UseCounter::kRTCPeerConnectionCreateDataChannelMaxRetransmits);
+    init.max_retransmits = data_channel_dict.maxRetransmits();
+  }
+  init.protocol = data_channel_dict.protocol();
+  init.negotiated = data_channel_dict.negotiated();
+  if (data_channel_dict.hasId())
+    init.id = data_channel_dict.id();
 
   RTCDataChannel* channel = RTCDataChannel::Create(
       GetExecutionContext(), peer_handler_.get(), label, init, exception_state);
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.h b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.h
index ba464986..651bbe7 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.h
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.h
@@ -53,6 +53,7 @@
 class RTCConfiguration;
 class RTCDTMFSender;
 class RTCDataChannel;
+class RTCDataChannelInit;
 class RTCIceCandidateInitOrRTCIceCandidate;
 class RTCOfferOptions;
 class RTCPeerConnectionErrorCallback;
@@ -153,7 +154,7 @@
 
   RTCDataChannel* createDataChannel(ScriptState*,
                                     String label,
-                                    const Dictionary& data_channel_dict,
+                                    const RTCDataChannelInit&,
                                     ExceptionState&);
 
   RTCDTMFSender* createDTMFSender(MediaStreamTrack*, ExceptionState&);
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.idl b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.idl
index f7d0137..47d1413 100644
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.idl
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.idl
@@ -116,9 +116,7 @@
     sequence<RTCRtpReceiver> getReceivers();
 
     // https://w3c.github.io/webrtc-pc/#peer-to-peer-data-api
-    // TODO(guidou): The label argument should have [TreatNullAs=EmptyString]
-    // and be non-nullable.
-    [CallWith=ScriptState, RaisesException] RTCDataChannel createDataChannel(DOMString? label, optional Dictionary options);
+    [CallWith=ScriptState, RaisesException] RTCDataChannel createDataChannel(USVString label, optional RTCDataChannelInit dataChannelDict);
     attribute EventHandler ondatachannel;
 
     // Certificate management
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
index e2b20e8..c688276 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.cpp
@@ -63,18 +63,6 @@
   return scrollbar_.Location();
 }
 
-FrameViewBase* WebScrollbarThemeClientImpl::Parent() const {
-  // Unused by Chromium scrollbar themes.
-  NOTREACHED();
-  return 0;
-}
-
-FrameViewBase* WebScrollbarThemeClientImpl::Root() const {
-  // Unused by Chromium scrollbar themes.
-  NOTREACHED();
-  return 0;
-}
-
 void WebScrollbarThemeClientImpl::SetFrameRect(const IntRect&) {
   // Unused by Chromium scrollbar themes.
   NOTREACHED();
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.h b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.h
index 8890fe4..0ce97be 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.h
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeClientImpl.h
@@ -53,8 +53,6 @@
   int Height() const override;
   IntSize Size() const override;
   IntPoint Location() const override;
-  FrameViewBase* Parent() const override;
-  FrameViewBase* Root() const override;
   void SetFrameRect(const IntRect&) override;
   IntRect FrameRect() const override;
   void Invalidate() override;
diff --git a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
index ddc3aff..0cc3aa1 100644
--- a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
+++ b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp
@@ -63,7 +63,8 @@
                     &Scrollbar::AutoscrollTimerFired),
       elastic_overscroll_(0),
       track_needs_repaint_(true),
-      thumb_needs_repaint_(true) {
+      thumb_needs_repaint_(true),
+      parent_(nullptr) {
   theme_.RegisterScrollbar(*this);
 
   // FIXME: This is ugly and would not be necessary if we fix cross-platform
@@ -74,7 +75,7 @@
   theme_scrollbar_thickness_ = thickness;
   if (chrome_client_)
     thickness = chrome_client_->WindowToViewportScalar(thickness);
-  FrameViewBase::SetFrameRect(IntRect(0, 0, thickness, thickness));
+  frame_rect_ = IntRect(0, 0, thickness, thickness);
 
   current_pos_ = ScrollableAreaCurrentPos();
 }
@@ -86,14 +87,14 @@
 DEFINE_TRACE(Scrollbar) {
   visitor->Trace(scrollable_area_);
   visitor->Trace(chrome_client_);
-  FrameViewBase::Trace(visitor);
+  visitor->Trace(parent_);
 }
 
 void Scrollbar::SetFrameRect(const IntRect& frame_rect) {
-  if (frame_rect == this->FrameRect())
+  if (frame_rect == frame_rect_)
     return;
 
-  FrameViewBase::SetFrameRect(frame_rect);
+  frame_rect_ = frame_rect;
   SetNeedsPaintInvalidation(kAllParts);
   if (scrollable_area_)
     scrollable_area_->ScrollbarFrameRectChanged();
diff --git a/third_party/WebKit/Source/platform/scroll/Scrollbar.h b/third_party/WebKit/Source/platform/scroll/Scrollbar.h
index 12a04266..ecb2b7bc 100644
--- a/third_party/WebKit/Source/platform/scroll/Scrollbar.h
+++ b/third_party/WebKit/Source/platform/scroll/Scrollbar.h
@@ -45,7 +45,7 @@
 class WebGestureEvent;
 class WebMouseEvent;
 
-class PLATFORM_EXPORT Scrollbar : public FrameViewBase,
+class PLATFORM_EXPORT Scrollbar : public GarbageCollectedFinalized<Scrollbar>,
                                   public ScrollbarThemeClient,
                                   public DisplayItemClient {
  public:
@@ -68,18 +68,18 @@
   ~Scrollbar() override;
 
   // ScrollbarThemeClient implementation.
-  int X() const override { return FrameViewBase::X(); }
-  int Y() const override { return FrameViewBase::Y(); }
-  int Width() const override { return FrameViewBase::Width(); }
-  int Height() const override { return FrameViewBase::Height(); }
-  IntSize Size() const override { return FrameViewBase::Size(); }
-  IntPoint Location() const override { return FrameViewBase::Location(); }
+  int X() const override { return frame_rect_.X(); }
+  int Y() const override { return frame_rect_.Y(); }
+  int Width() const override { return frame_rect_.Width(); }
+  int Height() const override { return frame_rect_.Height(); }
+  IntSize Size() const override { return frame_rect_.Size(); }
+  IntPoint Location() const override { return frame_rect_.Location(); }
 
-  FrameViewBase* Parent() const override { return FrameViewBase::Parent(); }
-  FrameViewBase* Root() const override { return FrameViewBase::Root(); }
+  virtual void SetParent(FrameViewBase* parent) { parent_ = parent; }
+  FrameViewBase* Parent() const { return parent_; }
 
-  void SetFrameRect(const IntRect&) override;
-  IntRect FrameRect() const override { return FrameViewBase::FrameRect(); }
+  void SetFrameRect(const IntRect&);
+  IntRect FrameRect() const override { return frame_rect_; }
 
   ScrollbarOverlayColorTheme GetScrollbarOverlayColorTheme() const override;
   void GetTickmarks(Vector<IntRect>&) const override;
@@ -156,7 +156,7 @@
   ScrollbarTheme& GetTheme() const { return theme_; }
 
   IntRect ConvertToContainingFrameViewBase(const IntRect&) const;
-  IntPoint ConvertFromContainingFrameViewBase(const IntPoint&) const override;
+  IntPoint ConvertFromContainingFrameViewBase(const IntPoint&) const;
 
   void MoveThumb(int pos, bool dragging_document = false);
 
@@ -239,8 +239,6 @@
   float elastic_overscroll_;
 
  private:
-  bool IsScrollbar() const override { return true; }
-
   void Invalidate() override { SetNeedsPaintInvalidation(kAllParts); }
   void InvalidateRect(const IntRect&) override {
     SetNeedsPaintInvalidation(kAllParts);
@@ -254,14 +252,10 @@
   bool track_needs_repaint_;
   bool thumb_needs_repaint_;
   LayoutRect visual_rect_;
+  Member<FrameViewBase> parent_;
+  IntRect frame_rect_;
 };
 
-DEFINE_TYPE_CASTS(Scrollbar,
-                  FrameViewBase,
-                  frameViewBase,
-                  frameViewBase->IsScrollbar(),
-                  frameViewBase.IsScrollbar());
-
 }  // namespace blink
 
 #endif  // Scrollbar_h
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
index 70abb84..45075f2 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
+++ b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
@@ -35,8 +35,6 @@
 
 namespace blink {
 
-class FrameViewBase;
-
 class PLATFORM_EXPORT ScrollbarThemeClient {
  public:
   virtual int X() const = 0;
@@ -46,9 +44,6 @@
   virtual IntSize Size() const = 0;
   virtual IntPoint Location() const = 0;
 
-  virtual FrameViewBase* Parent() const = 0;
-  virtual FrameViewBase* Root() const = 0;
-
   virtual void SetFrameRect(const IntRect&) = 0;
   virtual IntRect FrameRect() const = 0;
 
diff --git a/third_party/WebKit/Source/web/BUILD.gn b/third_party/WebKit/Source/web/BUILD.gn
index aecc65d9..3ea297e 100644
--- a/third_party/WebKit/Source/web/BUILD.gn
+++ b/third_party/WebKit/Source/web/BUILD.gn
@@ -133,8 +133,6 @@
     "WebArrayBuffer.cpp",
     "WebArrayBufferConverter.cpp",
     "WebArrayBufferView.cpp",
-    "WebAssociatedURLLoaderImpl.cpp",
-    "WebAssociatedURLLoaderImpl.h",
     "WebCSSParser.cpp",
     "WebColorSuggestion.cpp",
     "WebCryptoNormalize.cpp",
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
index a04b435..12eebbc 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -120,6 +120,7 @@
 #include "core/editing/markers/DocumentMarkerController.h"
 #include "core/editing/serializers/Serialization.h"
 #include "core/editing/spellcheck/SpellChecker.h"
+#include "core/exported/WebAssociatedURLLoaderImpl.h"
 #include "core/frame/FrameView.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/PageScaleConstraintsSet.h"
@@ -225,7 +226,6 @@
 #include "web/SharedWorkerRepositoryClientImpl.h"
 #include "web/TextCheckerClientImpl.h"
 #include "web/TextFinder.h"
-#include "web/WebAssociatedURLLoaderImpl.h"
 #include "web/WebDataSourceImpl.h"
 #include "web/WebDevToolsAgentImpl.h"
 #include "web/WebFrameWidgetImpl.h"
@@ -965,7 +965,7 @@
 
 WebAssociatedURLLoader* WebLocalFrameImpl::CreateAssociatedURLLoader(
     const WebAssociatedURLLoaderOptions& options) {
-  return new WebAssociatedURLLoaderImpl(this, options);
+  return new WebAssociatedURLLoaderImpl(GetFrame()->GetDocument(), options);
 }
 
 unsigned WebLocalFrameImpl::UnloadListenerCount() const {
diff --git a/third_party/WebKit/public/platform/WebRTCConfiguration.h b/third_party/WebKit/public/platform/WebRTCConfiguration.h
index 3322029..9d60ce7 100644
--- a/third_party/WebKit/public/platform/WebRTCConfiguration.h
+++ b/third_party/WebKit/public/platform/WebRTCConfiguration.h
@@ -48,7 +48,7 @@
   WebString credential;
 };
 
-enum class WebRTCIceTransportPolicy { kNone, kRelay, kAll };
+enum class WebRTCIceTransportPolicy { kRelay, kAll };
 
 enum class WebRTCBundlePolicy { kBalanced, kMaxCompat, kMaxBundle };
 
diff --git a/third_party/WebKit/public/web/WebAssociatedURLLoader.h b/third_party/WebKit/public/web/WebAssociatedURLLoader.h
index b44b32b..28fb458 100644
--- a/third_party/WebKit/public/web/WebAssociatedURLLoader.h
+++ b/third_party/WebKit/public/web/WebAssociatedURLLoader.h
@@ -33,6 +33,8 @@
 
 #include "public/web/WebAssociatedURLLoaderOptions.h"
 
+#include "public/platform/WebCommon.h"
+
 namespace blink {
 
 class WebAssociatedURLLoaderClient;
@@ -40,7 +42,7 @@
 class WebURLRequest;
 
 // This class is used to implement WebFrame::createAssociatedURLLoader.
-class WebAssociatedURLLoader {
+class BLINK_EXPORT WebAssociatedURLLoader {
  public:
   virtual ~WebAssociatedURLLoader() {}