Upstream Chrome on iOS source code [11/11].

Upstream all BUILD.gn changes to enable compilation of the code
that has been upstreamed by the previous ten CLs and changes to
browser_state_keyed_service_factories.mm to use the new factory.

Update the default provider factory to use chromium provider (it
will be merged with ChromeBrowserProvider eventually).

BUG=653086
[email protected], [email protected]

Committed: https://chromium.googlesource.com/chromium/src/+/1e23576749d95a02d22b2ff4277eaf132dce4831
Review-Url: https://codereview.chromium.org/2589843002
Cr-Commit-Position: refs/heads/master@{#439601}
diff --git a/ios/BUILD.gn b/ios/BUILD.gn
index bed47ee..feff75c 100644
--- a/ios/BUILD.gn
+++ b/ios/BUILD.gn
@@ -27,6 +27,8 @@
   } else {
     deps = [
       # List all the targets that need to be build on iOS by default.
+      "//ios/chrome/app:chrome",
+      "//ios/chrome/app:chrome_clean_skeleton",
       "//ios/web/shell:ios_web_shell",
 
       # List all the test targets that need to be build on iOS by default.
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index 8f522fc..c94edae 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/ios/rules.gni")
+import("//build/config/mac/base_rules.gni")
 import("//build/mac/tweak_info_plist.gni")
 import("//ios/build/chrome_build.gni")
 import("//ios/public/provider/chrome/browser/build_config.gni")
@@ -29,14 +30,28 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "chrome_app_startup_parameters_unittest.mm",
+    "chrome_overlay_window_testing.h",
     "deferred_initialization_runner_unittest.mm",
+    "main_application_delegate_unittest.mm",
+    "main_controller_unittest.mm",
     "safe_mode_util_unittest.cc",
   ]
   deps = [
     ":app",
+    ":app_internal",
     "//base",
     "//base/test:test_support",
+    "//ios/chrome/app/application_delegate:application_delegate_internal",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/common/app_group",
+    "//ios/chrome/test/base",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/distribution",
     "//testing/gtest",
+    "//third_party/ocmock",
+    "//url",
   ]
 }
 
@@ -96,3 +111,297 @@
   substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
   output_name = "$target_gen_dir/$chromium_short_name.entitlements"
 }
+
+source_set("app_internal") {
+  sources = [
+    "application_mode.h",
+    "chrome_app_startup_parameters.h",
+    "chrome_app_startup_parameters.mm",
+    "chrome_overlay_window.h",
+    "chrome_overlay_window.mm",
+    "main_application_delegate.h",
+    "main_application_delegate.mm",
+    "main_application_delegate_testing.h",
+    "main_controller.h",
+    "main_controller.mm",
+    "main_controller_private.h",
+    "memory_monitor.h",
+    "memory_monitor.mm",
+    "startup_tasks.h",
+    "startup_tasks.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/browser_sync",
+    "//components/browsing_data/core",
+    "//components/component_updater",
+    "//components/content_settings/core/browser",
+    "//components/crash/core/common",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/handoff",
+    "//components/history/core/browser",
+    "//components/infobars/core",
+    "//components/keyed_service/core",
+    "//components/keyed_service/ios",
+    "//components/metrics",
+    "//components/prefs",
+    "//components/proxy_config",
+    "//components/reading_list/core",
+    "//components/signin/core/browser",
+    "//components/suggestions",
+    "//components/sync",
+    "//components/url_formatter",
+    "//components/web_resource",
+    "//ios/chrome/app",
+    "//ios/chrome/app:tests_hook",
+    "//ios/chrome/app/application_delegate",
+    "//ios/chrome/app/application_delegate:application_delegate_internal",
+    "//ios/chrome/app/safe_mode",
+    "//ios/chrome/app/spotlight",
+    "//ios/chrome/app/startup",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:browser_state_impl",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/browsing_data:browsing_data_internal",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/crash_report:crash_report_internal",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/first_run",
+    "//ios/chrome/browser/geolocation",
+    "//ios/chrome/browser/geolocation:geolocation_internal",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/memory",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
+    "//ios/chrome/browser/net",
+    "//ios/chrome/browser/omaha",
+    "//ios/chrome/browser/prefs",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/share_extension",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/suggestions",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/contextual_search",
+    "//ios/chrome/browser/ui/downloads",
+    "//ios/chrome/browser/ui/first_run",
+    "//ios/chrome/browser/ui/history",
+    "//ios/chrome/browser/ui/main",
+    "//ios/chrome/browser/ui/promos",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/stack_view",
+    "//ios/chrome/browser/ui/tab_switcher",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/browser/ui/webui:webui_internal",
+    "//ios/chrome/browser/upgrade",
+    "//ios/chrome/browser/variations:ios_chrome_ui_string_overrider_factory",
+    "//ios/chrome/browser/voice",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/common",
+    "//ios/chrome/common/app_group",
+    "//ios/chrome/common/app_group:main_app",
+    "//ios/net",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/distribution",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/public/provider/chrome/browser/signin",
+    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//ios/web/public/app",
+    "//mojo/edk/system",
+    "//net",
+    "//skia",
+    "//ui/base",
+    "//ui/gfx",
+    "//ui/resources",
+    "//ui/strings:ui_strings",
+  ]
+
+  libs = [
+    "CoreSpotlight.framework",
+    "MediaPlayer.framework",
+  ]
+
+  allow_circular_includes_from =
+      [ "//ios/chrome/app/application_delegate:application_delegate_internal" ]
+}
+
+source_set("main") {
+  sources = [
+    "chrome_exe_main.mm",
+  ]
+
+  deps = [
+    ":app_internal",
+    "//base",
+    "//components/crash/core/common",
+    "//ios/chrome/app/startup",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/common",
+    "//third_party/google_toolbox_for_mac",
+  ]
+}
+
+ios_app_bundle("chrome") {
+  output_name = chromium_short_name
+
+  entitlements_target = ":entitlements"
+  info_plist_target = ":info_plist"
+
+  deps = [
+    ":main",
+    "//ios/chrome/app:tests_fake_hook",
+  ]
+
+  bundle_deps = [ "//ios/chrome/app/resources" ]
+
+  if (ios_enable_today_extension && current_toolchain == default_toolchain) {
+    deps += [ ":today_extension_bundle" ]
+  }
+
+  if (ios_enable_share_extension && current_toolchain == default_toolchain) {
+    deps += [ ":share_extension_bundle" ]
+  }
+
+  extra_substitutions = [
+    "CHROMIUM_BUNDLE_ID=$chromium_bundle_id",
+    "CHROMIUM_HANDOFF_ID=$chromium_handoff_id",
+    "CHROMIUM_SHORT_NAME=$chromium_short_name",
+    "CHROMIUM_URL_SCHEME_1=$url_unsecure_scheme",
+    "CHROMIUM_URL_SCHEME_2=$url_secure_scheme",
+    "CHROMIUM_URL_SCHEME_3=$url_x_callback_scheme",
+    "CHROMIUM_URL_SCHEME_4=$url_channel_scheme",
+    "SSOAUTH_URL_SCHEME=$url_ssoauth_scheme",
+  ]
+
+  if (ios_encryption_export_compliance_code != "") {
+    extra_substitutions += [ "ENCRYPTION_EXPORT_COMPLIANCE_CODE=" +
+                             ios_encryption_export_compliance_code ]
+  }
+}
+
+if (ios_enable_today_extension && current_toolchain == default_toolchain) {
+  bundle_data("today_extension_bundle") {
+    public_deps = [
+      "//ios/chrome/today_extension",
+    ]
+    sources = [
+      "$root_out_dir/today_extension.appex",
+    ]
+    outputs = [
+      "{{bundle_plugins_dir}}/{{source_file_part}}",
+    ]
+  }
+}
+
+if (ios_enable_share_extension && current_toolchain == default_toolchain) {
+  bundle_data("share_extension_bundle") {
+    public_deps = [
+      "//ios/chrome/share_extension",
+    ]
+    sources = [
+      "$root_out_dir/share_extension.appex",
+    ]
+    outputs = [
+      "{{bundle_plugins_dir}}/{{source_file_part}}",
+    ]
+  }
+}
+
+# Clean Skeleton targets.
+ios_app_bundle("chrome_clean_skeleton") {
+  output_name = "CSChromium"
+
+  entitlements_path = "//ios/chrome/app/resources/Chrome.entitlements"
+  info_plist_target = ":info_plist"
+
+  deps = [
+    ":main_clean_skeleton",
+    "//ios/chrome/app:tests_fake_hook",
+  ]
+
+  bundle_deps = [ "//ios/chrome/app/resources" ]
+
+  extra_substitutions = [
+    "CHROMIUM_BUNDLE_ID=$chromium_bundle_id",
+    "CHROMIUM_SHORT_NAME=$chromium_short_name",
+    "CHROMIUM_URL_SCHEME_1=$url_unsecure_scheme",
+    "CHROMIUM_URL_SCHEME_2=$url_secure_scheme",
+    "CHROMIUM_URL_SCHEME_3=$url_x_callback_scheme",
+    "CHROMIUM_URL_SCHEME_4=$url_channel_scheme",
+  ]
+
+  if (ios_encryption_export_compliance_code != "") {
+    extra_substitutions += [ "ENCRYPTION_EXPORT_COMPLIANCE_CODE=" +
+                             ios_encryption_export_compliance_code ]
+  }
+}
+
+source_set("main_clean_skeleton") {
+  sources = [
+    "main.mm",
+  ]
+
+  deps = [
+    ":app_clean_skeleton",
+    "//base",
+    "//components/crash/core/common",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/startup",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/common",
+    "//third_party/google_toolbox_for_mac",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("application_state_clean_skeleton") {
+  sources = [
+    "application_phase.h",
+    "application_state.h",
+    "application_state.mm",
+    "application_step.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser:browser_clean_skeleton",
+  ]
+}
+
+source_set("app_clean_skeleton") {
+  sources = [
+    "app_delegate.h",
+    "app_delegate.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":application_state_clean_skeleton",
+    "//ios/chrome/app/steps",
+  ]
+}
diff --git a/ios/chrome/app/application_delegate/BUILD.gn b/ios/chrome/app/application_delegate/BUILD.gn
index adea24c..c56736b 100644
--- a/ios/chrome/app/application_delegate/BUILD.gn
+++ b/ios/chrome/app/application_delegate/BUILD.gn
@@ -20,12 +20,136 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "app_state_unittest.mm",
+    "background_activity_unittest.mm",
     "memory_warning_helper_unittest.mm",
+    "metrics_mediator_unittest.mm",
+    "url_opener_unittest.mm",
+    "user_activity_handler_unittest.mm",
   ]
   deps = [
     ":application_delegate",
+    ":application_delegate_internal",
+    ":test_support",
     "//base",
+    "//base/test:test_support",
+    "//breakpad:client",
+    "//components/handoff",
+    "//components/metrics",
+    "//ios/chrome/app",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/application_delegate",
+    "//ios/chrome/app/safe_mode",
+    "//ios/chrome/app/spotlight",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/device_sharing",
+    "//ios/chrome/browser/geolocation",
     "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/u2f",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/main",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/test:test_support",
+    "//ios/chrome/test/base",
+    "//ios/chrome/test/ocmock",
+    "//ios/public/provider/chrome/browser:test_support",
+    "//ios/public/provider/chrome/browser/distribution",
+    "//ios/public/provider/chrome/browser/user_feedback:test_support",
+    "//ios/testing:ocmock_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net:test_support",
     "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+    "//url",
   ]
+  libs = [
+    "CoreSpotlight.framework",
+    "QuartzCore.framework",
+  ]
+}
+
+source_set("application_delegate_internal") {
+  sources = [
+    "app_navigation.h",
+    "app_state.h",
+    "app_state.mm",
+    "background_activity.h",
+    "background_activity.mm",
+    "browser_launcher.h",
+    "metrics_mediator.h",
+    "metrics_mediator.mm",
+    "startup_information.h",
+    "tab_opening.h",
+    "tab_switching.h",
+    "url_opener.h",
+    "url_opener.mm",
+    "user_activity_handler.h",
+    "user_activity_handler.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/crash/core/common",
+    "//components/handoff",
+    "//components/metrics",
+    "//components/prefs",
+    "//ios/chrome/app",
+    "//ios/chrome/app/application_delegate",
+    "//ios/chrome/app/safe_mode",
+    "//ios/chrome/app/spotlight",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/device_sharing",
+    "//ios/chrome/browser/geolocation",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/net",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/u2f",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/main",
+    "//ios/chrome/common/app_group:main_app",
+    "//ios/net",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/distribution",
+    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "CoreSpotlight.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "app_state_testing.h",
+    "fake_startup_information.h",
+    "fake_startup_information.mm",
+    "metrics_mediator_testing.h",
+    "mock_tab_opener.h",
+    "mock_tab_opener.mm",
+  ]
+  deps = [
+    ":application_delegate_internal",
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/browser",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
 }
diff --git a/ios/chrome/app/safe_mode/BUILD.gn b/ios/chrome/app/safe_mode/BUILD.gn
index 17b18e6b..947affb 100644
--- a/ios/chrome/app/safe_mode/BUILD.gn
+++ b/ios/chrome/app/safe_mode/BUILD.gn
@@ -12,3 +12,62 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("safe_mode") {
+  sources = [
+    "safe_mode_coordinator.h",
+    "safe_mode_coordinator.mm",
+    "safe_mode_view_controller.h",
+    "safe_mode_view_controller.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/app",
+    "//ios/chrome/app/safe_mode:resources",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ui/gfx",
+  ]
+
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "safe_mode_egtest.mm",
+  ]
+  deps = [
+    ":safe_mode",
+    "//base",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/main",
+    "//ios/chrome/test/base",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "safe_mode_coordinator_unittest.mm",
+    "safe_mode_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":safe_mode",
+    "//base",
+    "//breakpad:client",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/test/base",
+    "//ios/chrome/test/ocmock",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/app/spotlight/BUILD.gn b/ios/chrome/app/spotlight/BUILD.gn
new file mode 100644
index 0000000..89c8853
--- /dev/null
+++ b/ios/chrome/app/spotlight/BUILD.gn
@@ -0,0 +1,70 @@
+# 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.
+
+source_set("spotlight") {
+  sources = [
+    "actions_spotlight_manager.h",
+    "actions_spotlight_manager.mm",
+    "base_spotlight_manager.h",
+    "base_spotlight_manager.mm",
+    "bookmarks_spotlight_manager.h",
+    "bookmarks_spotlight_manager.mm",
+    "spotlight_manager.h",
+    "spotlight_manager.mm",
+    "spotlight_util.h",
+    "spotlight_util.mm",
+    "topsites_spotlight_manager.h",
+    "topsites_spotlight_manager.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/browser_sync",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/history/core/browser",
+    "//components/suggestions",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/suggestions",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/common/app_group",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/spotlight",
+    "//ios/third_party/material_components_ios",
+    "//net",
+    "//skia",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "CoreSpotlight.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "spotlight_manager_unittest.mm",
+  ]
+  deps = [
+    ":spotlight",
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/bookmarks/test",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/spotlight",
+    "//net",
+    "//testing/gtest",
+  ]
+  libs = [ "CoreSpotlight.framework" ]
+}
diff --git a/ios/chrome/app/startup/BUILD.gn b/ios/chrome/app/startup/BUILD.gn
new file mode 100644
index 0000000..f99be35
--- /dev/null
+++ b/ios/chrome/app/startup/BUILD.gn
@@ -0,0 +1,41 @@
+# 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/public/provider/chrome/browser/build_config.gni")
+
+source_set("startup") {
+  sources = [
+    "chrome_main_starter.h",
+    "chrome_main_starter.mm",
+    "client_registration.h",
+    "client_registration.mm",
+    "ios_chrome_main.h",
+    "ios_chrome_main.mm",
+    "ios_chrome_main_delegate.h",
+    "ios_chrome_main_delegate.mm",
+    "network_stack_setup.h",
+    "network_stack_setup.mm",
+    "provider_registration.h",
+    "provider_registration.mm",
+    "register_experimental_settings.h",
+    "register_experimental_settings.mm",
+    "setup_debugging.h",
+    "setup_debugging.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//components/crash/core/common",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/web",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/net",
+    "//ios/public/provider/chrome/browser",
+    "//ios/web",
+    "//ios/web/public/app",
+    "//skia",
+    ios_provider_target,
+  ]
+}
diff --git a/ios/chrome/app/steps/BUILD.gn b/ios/chrome/app/steps/BUILD.gn
new file mode 100644
index 0000000..5d44d5c
--- /dev/null
+++ b/ios/chrome/app/steps/BUILD.gn
@@ -0,0 +1,36 @@
+# 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.
+
+source_set("steps") {
+  sources = [
+    "launch_to_background.h",
+    "launch_to_background.mm",
+    "launch_to_basic.h",
+    "launch_to_basic.mm",
+    "launch_to_foreground.h",
+    "launch_to_foreground.mm",
+    "tab_grid_coordinator+application_step.h",
+    "tab_grid_coordinator+application_step.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//components/content_settings/core/browser",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app:application_state_clean_skeleton",
+    "//ios/chrome/app/startup",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:browser_state_impl",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/ui/tab_grid",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/net",
+    "//ios/web:web_arc",
+  ]
+}
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index bcea0d6f..81b92b1 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -221,6 +221,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "callback_counter_unittest.mm",
     "chrome_url_util_unittest.mm",
     "crash_loop_detection_util_unittest.mm",
     "install_time_util_unittest.mm",
@@ -230,6 +231,7 @@
   ]
   deps = [
     ":browser",
+    ":browser_internal",
     "//base",
     "//base/test:test_support",
     "//components/prefs",
@@ -244,3 +246,72 @@
     "//url",
   ]
 }
+
+source_set("browser_internal") {
+  sources = [
+    "callback_counter.h",
+    "callback_counter.mm",
+  ]
+  deps = [
+    "//base",
+  ]
+}
+
+source_set("downstream_provider") {
+  sources = [
+    "downstream_chromium_browser_provider.h",
+    "downstream_chromium_browser_provider.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/handoff",
+    "//components/pref_registry",
+    "//components/prefs",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill:autofill_internal",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:browser_state_impl",
+    "//ios/chrome/browser/providers",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/sync/glue",
+    "//ios/chrome/browser/sync/sessions",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/tabs:tabs_internal",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:browser_list",
+    "//ios/chrome/browser/ui/autofill:autofill_internal",
+    "//ios/chrome/browser/ui/bookmarks",
+    "//ios/chrome/browser/ui/infobars",
+    "//ios/chrome/browser/ui/webui:webui_internal",
+    "//ios/chrome/common",
+  ]
+}
+
+source_set("downstream_provider_factory") {
+  sources = [
+    "downstream_chromium_browser_provider_factory.mm",
+  ]
+  deps = [
+    ":downstream_provider",
+    "//base",
+    "//ios/public/provider/chrome/browser",
+  ]
+}
+
+# Clean Skeleton targets
+source_set("browser_clean_skeleton") {
+  sources = [
+    "browser_coordinator+internal.h",
+    "browser_coordinator.h",
+    "browser_coordinator.mm",
+    "url_opening.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+  ]
+}
diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/BUILD.gn
index 2c35bce9..21bd1b6 100644
--- a/ios/chrome/browser/autofill/BUILD.gn
+++ b/ios/chrome/browser/autofill/BUILD.gn
@@ -40,3 +40,92 @@
   ]
   libs = [ "QuartzCore.framework" ]
 }
+
+source_set("autofill_internal") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "autofill_agent.h",
+    "autofill_agent.mm",
+    "autofill_controller.h",
+    "autofill_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/autofill/core/browser",
+    "//components/autofill/core/common",
+    "//components/autofill/ios/browser",
+    "//components/infobars/core",
+    "//components/pref_registry",
+    "//components/prefs",
+    "//components/signin/core/browser",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui/autofill",
+    "//ios/web",
+    "//ui/gfx/geometry",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "autofill_controller_js_unittest.mm",
+    "autofill_controller_unittest.mm",
+    "form_structure_browsertest.mm",
+    "form_suggestion_controller_unittest.mm",
+    "js_autofill_manager_unittest.mm",
+    "js_suggestion_manager_unittest.mm",
+  ]
+  deps = [
+    ":autofill_internal",
+    "//base",
+    "//base/test:test_support",
+    "//components/autofill/core/browser",
+    "//components/autofill/core/browser:test_support",
+    "//components/autofill/core/common",
+    "//components/autofill/ios/browser",
+    "//components/infobars/core",
+    "//components/keyed_service/core",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/autofill",
+    "//ios/chrome/browser/web:test_support",
+    "//ios/chrome/test/base",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base:test_support",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "form_input_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:earl_grey_test_support",
+    "//ios/web:test_support",
+  ]
+}
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn
index ff04e6ea..f4cb360a 100644
--- a/ios/chrome/browser/browser_state/BUILD.gn
+++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -93,6 +93,7 @@
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/services/gcm",
+    "//ios/chrome/browser/sessions:sessions_internal",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/suggestions",
     "//ios/chrome/browser/sync",
diff --git a/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm b/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm
index 441bd71..68a3cc3d 100644
--- a/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm
+++ b/ios/chrome/browser/browser_state/browser_state_keyed_service_factories.mm
@@ -28,6 +28,7 @@
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #include "ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h"
+#include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios_factory.h"
 #include "ios/chrome/browser/signin/about_signin_internals_factory.h"
 #include "ios/chrome/browser/signin/account_consistency_service_factory.h"
 #include "ios/chrome/browser/signin/account_fetcher_service_factory.h"
@@ -98,5 +99,6 @@
   SigninClientFactory::GetInstance();
   suggestions::SuggestionsServiceFactory::GetInstance();
   SyncSetupServiceFactory::GetInstance();
+  TabRestoreServiceDelegateImplIOSFactory::GetInstance();
   TranslateAcceptLanguagesFactory::GetInstance();
 }
diff --git a/ios/chrome/browser/browsing_data/BUILD.gn b/ios/chrome/browser/browsing_data/BUILD.gn
index d8aaa48..6985aa83 100644
--- a/ios/chrome/browser/browsing_data/BUILD.gn
+++ b/ios/chrome/browser/browsing_data/BUILD.gn
@@ -53,17 +53,48 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "browsing_data_removal_controller_unittest.mm",
     "cache_counter_unittest.cc",
   ]
   deps = [
     ":browsing_data",
+    ":browsing_data_internal",
     "//base",
+    "//base/test:test_support",
     "//components/browsing_data/core",
     "//components/prefs",
     "//components/prefs:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
     "//ios/web",
     "//ios/web:test_support",
     "//net",
     "//testing/gtest",
+    "//third_party/ocmock",
   ]
 }
+
+source_set("browsing_data_internal") {
+  sources = [
+    "browsing_data_removal_controller.h",
+    "browsing_data_removal_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/browsing_data/core",
+    "//components/open_from_clipboard",
+    "//components/signin/ios/browser",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/web",
+    "//net",
+  ]
+  libs = [ "WebKit.framework" ]
+}
diff --git a/ios/chrome/browser/context_menu/BUILD.gn b/ios/chrome/browser/context_menu/BUILD.gn
new file mode 100644
index 0000000..aa2ccd23
--- /dev/null
+++ b/ios/chrome/browser/context_menu/BUILD.gn
@@ -0,0 +1,26 @@
+# 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.
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "context_menu_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:earl_grey_test_support",
+    "//ios/web:test_support",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/crash_report/BUILD.gn b/ios/chrome/browser/crash_report/BUILD.gn
index 68085844..9b69033 100644
--- a/ios/chrome/browser/crash_report/BUILD.gn
+++ b/ios/chrome/browser/crash_report/BUILD.gn
@@ -29,3 +29,52 @@
     "//ios/web",
   ]
 }
+
+source_set("crash_report_internal") {
+  sources = [
+    "crash_report_helper.h",
+    "crash_report_helper.mm",
+    "crash_restore_helper.h",
+    "crash_restore_helper.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/infobars/core",
+    "//components/sessions",
+    "//components/strings",
+    "//components/upload_list",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/tabs",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "breakpad_helper_unittest.mm",
+    "crash_restore_helper_unittest.mm",
+  ]
+  deps = [
+    ":crash_report_internal",
+    "//base",
+    "//breakpad:client",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/test/base",
+    "//ios/chrome/test/ocmock",
+    "//ios/web:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/device_sharing/BUILD.gn b/ios/chrome/browser/device_sharing/BUILD.gn
index ef719c3f..ab5c388b 100644
--- a/ios/chrome/browser/device_sharing/BUILD.gn
+++ b/ios/chrome/browser/device_sharing/BUILD.gn
@@ -36,3 +36,22 @@
     "//url",
   ]
 }
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "handoff_manager_egtest.mm",
+  ]
+  deps = [
+    "//components/handoff",
+    "//ios/chrome/browser/device_sharing",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//net",
+    "//url",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/geolocation/BUILD.gn b/ios/chrome/browser/geolocation/BUILD.gn
index d386fa59..57c5fa44f 100644
--- a/ios/chrome/browser/geolocation/BUILD.gn
+++ b/ios/chrome/browser/geolocation/BUILD.gn
@@ -64,3 +64,26 @@
     "//third_party/ocmock",
   ]
 }
+
+source_set("geolocation_internal") {
+  sources = [
+    "omnibox_geolocation_controller+Testing.h",
+    "omnibox_geolocation_controller.h",
+    "omnibox_geolocation_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/google/core/browser",
+    "//components/version_info",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/geolocation",
+    "//ios/chrome/browser/tabs",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "CoreLocation.framework",
+    "UIKit.framework",
+  ]
+}
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn
index e9a7abf..a103be6 100644
--- a/ios/chrome/browser/metrics/BUILD.gn
+++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -79,3 +79,80 @@
     "//testing/gtest",
   ]
 }
+
+source_set("metrics_internal") {
+  sources = [
+    "first_user_action_recorder.cc",
+    "first_user_action_recorder.h",
+    "new_tab_page_uma.h",
+    "new_tab_page_uma.mm",
+    "size_class_recorder.h",
+    "size_class_recorder.mm",
+    "size_class_recorder_private.h",
+    "tab_usage_recorder.h",
+    "tab_usage_recorder.mm",
+    "tab_usage_recorder_delegate.h",
+  ]
+  deps = [
+    "//base",
+    "//components/google/core/browser",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:browser_list",
+    "//ios/web",
+    "//ui/base:base",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests_internal") {
+  testonly = true
+  sources = [
+    "first_user_action_recorder_unittest.cc",
+    "size_class_recorder_unittest.mm",
+    "tab_usage_recorder_unittest.mm",
+  ]
+  deps = [
+    ":metrics_internal",
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/testing:ocmock_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "tab_usage_recorder_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/native_app_launcher/BUILD.gn b/ios/chrome/browser/native_app_launcher/BUILD.gn
index 0bac471d..a4de503 100644
--- a/ios/chrome/browser/native_app_launcher/BUILD.gn
+++ b/ios/chrome/browser/native_app_launcher/BUILD.gn
@@ -50,3 +50,54 @@
     "//url",
   ]
 }
+
+source_set("native_app_launcher_internal") {
+  sources = [
+    "native_app_navigation_controller.h",
+    "native_app_navigation_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/infobars/core",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/native_app_launcher",
+    "//ios/chrome/browser/net",
+    "//ios/chrome/browser/tabs",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/public/provider/chrome/browser/signin",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "StoreKit.framework" ]
+}
+
+source_set("unit_tests_internal") {
+  testonly = true
+  sources = [
+    "native_app_navigation_controller_unittest.mm",
+  ]
+  deps = [
+    ":native_app_launcher_internal",
+    "//base",
+    "//base/test:test_support",
+    "//components/infobars/core",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/native_app_launcher",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser:test_support",
+    "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//url",
+  ]
+}
diff --git a/ios/chrome/browser/net/BUILD.gn b/ios/chrome/browser/net/BUILD.gn
index ad7fb27..b628ccce 100644
--- a/ios/chrome/browser/net/BUILD.gn
+++ b/ios/chrome/browser/net/BUILD.gn
@@ -72,3 +72,19 @@
     "//testing/gtest",
   ]
 }
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "cookies_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//url",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/passwords/BUILD.gn b/ios/chrome/browser/passwords/BUILD.gn
index 8aea29c..d0bd285 100644
--- a/ios/chrome/browser/passwords/BUILD.gn
+++ b/ios/chrome/browser/passwords/BUILD.gn
@@ -139,3 +139,27 @@
     "resources/password_controller.js",
   ]
 }
+
+source_set("passwords_internal") {
+  sources = [
+    "password_generation_prompt_view.h",
+    "password_generation_prompt_view.mm",
+    "password_generation_prompt_view_controller.h",
+    "password_generation_prompt_view_controller.mm",
+    "passwords_ui_delegate_impl.h",
+    "passwords_ui_delegate_impl.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/common",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/payments/BUILD.gn b/ios/chrome/browser/payments/BUILD.gn
index 3055b88c..bbfbeb1f 100644
--- a/ios/chrome/browser/payments/BUILD.gn
+++ b/ios/chrome/browser/payments/BUILD.gn
@@ -9,3 +9,77 @@
     "resources/payment_request_manager.js",
   ]
 }
+
+source_set("payments") {
+  sources = [
+    "js_payment_request_manager.h",
+    "js_payment_request_manager.mm",
+    "payment_items_display_coordinator.h",
+    "payment_items_display_coordinator.mm",
+    "payment_items_display_view_controller.h",
+    "payment_items_display_view_controller.mm",
+    "payment_method_selection_coordinator.h",
+    "payment_method_selection_coordinator.mm",
+    "payment_method_selection_view_controller.h",
+    "payment_method_selection_view_controller.mm",
+    "payment_request_coordinator.h",
+    "payment_request_coordinator.mm",
+    "payment_request_manager.h",
+    "payment_request_manager.mm",
+    "payment_request_utils.h",
+    "payment_request_utils.mm",
+    "payment_request_view_controller.h",
+    "payment_request_view_controller.mm",
+    "payment_request_web_state_observer.h",
+    "payment_request_web_state_observer.mm",
+    "shipping_address_selection_coordinator.h",
+    "shipping_address_selection_coordinator.mm",
+    "shipping_address_selection_view_controller.h",
+    "shipping_address_selection_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/autofill/core/browser",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/payments:injected_js",
+    "//ios/chrome/browser/payments/cells",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//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("unit_tests") {
+  testonly = true
+  sources = [
+    "payment_items_display_coordinator_unittest.mm",
+    "payment_items_display_view_controller_unittest.mm",
+    "shipping_address_selection_coordinator_unittest.mm",
+    "shipping_address_selection_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":payments",
+    "//base",
+    "//base/test:test_support",
+    "//components/autofill/core/browser",
+    "//ios/chrome/app/strings",
+    "//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/third_party/material_components_ios",
+    "//ios/web",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/payments/cells/BUILD.gn b/ios/chrome/browser/payments/cells/BUILD.gn
new file mode 100644
index 0000000..1671ba3
--- /dev/null
+++ b/ios/chrome/browser/payments/cells/BUILD.gn
@@ -0,0 +1,43 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("cells") {
+  sources = [
+    "order_summary_line_item.h",
+    "order_summary_line_item.mm",
+    "order_summary_total_item.h",
+    "order_summary_total_item.mm",
+    "page_info_item.h",
+    "page_info_item.mm",
+    "payment_method_item.h",
+    "payment_method_item.mm",
+    "shipping_address_item.h",
+    "shipping_address_item.mm",
+  ]
+
+  deps = [
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "page_info_item_unittest.mm",
+    "payment_method_item_unittest.mm",
+  ]
+
+  deps = [
+    ":cells",
+    "//ios/chrome/browser/ui/collection_view/cells:test_support",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/sessions/BUILD.gn b/ios/chrome/browser/sessions/BUILD.gn
index a64f3a8..5e7154f5 100644
--- a/ios/chrome/browser/sessions/BUILD.gn
+++ b/ios/chrome/browser/sessions/BUILD.gn
@@ -24,3 +24,76 @@
     "//url",
   ]
 }
+
+source_set("sessions_internal") {
+  sources = [
+    "NSCoder+Compatibility.h",
+    "NSCoder+Compatibility.mm",
+    "session_service.h",
+    "session_service.mm",
+    "session_util.h",
+    "session_util.mm",
+    "session_window.h",
+    "session_window.mm",
+    "tab_restore_service_delegate_impl_ios.h",
+    "tab_restore_service_delegate_impl_ios.mm",
+    "tab_restore_service_delegate_impl_ios_factory.h",
+    "tab_restore_service_delegate_impl_ios_factory.mm",
+    "tab_restore_service_delegate_provider_impl.h",
+    "tab_restore_service_delegate_provider_impl.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/keyed_service/core",
+    "//components/keyed_service/ios",
+    "//components/sessions",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui:browser_list",
+    "//ios/public/provider/chrome/browser/sessions",
+    "//ios/web",
+    "//net",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "test_session_service.h",
+    "test_session_service.mm",
+  ]
+  deps = [
+    ":sessions_internal",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "session_service_unittest.mm",
+    "session_window_unittest.mm",
+  ]
+  deps = [
+    ":resources_unit_tests",
+    ":sessions_internal",
+    "//base",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+bundle_data("resources_unit_tests") {
+  visibility = [ ":unit_tests" ]
+  testonly = true
+  sources = [
+    "//ios/chrome/test/data/sessions/corrupted.plist",
+  ]
+  outputs = [
+    "{{bundle_resources_dir}}/ios/chrome/test/data/sessions/{{source_file_part}}",
+  ]
+}
diff --git a/ios/chrome/browser/signin/BUILD.gn b/ios/chrome/browser/signin/BUILD.gn
index c31264b..8e7b805f 100644
--- a/ios/chrome/browser/signin/BUILD.gn
+++ b/ios/chrome/browser/signin/BUILD.gn
@@ -134,3 +134,16 @@
     "//third_party/ocmock",
   ]
 }
+
+source_set("signin_internal") {
+  sources = [
+    "signin_capability.cc",
+    "signin_capability.h",
+  ]
+  deps = [
+    "//base",
+    "//components/signin/core/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/signin",
+  ]
+}
diff --git a/ios/chrome/browser/snapshots/BUILD.gn b/ios/chrome/browser/snapshots/BUILD.gn
index cfda2e7..3a7d0968 100644
--- a/ios/chrome/browser/snapshots/BUILD.gn
+++ b/ios/chrome/browser/snapshots/BUILD.gn
@@ -41,3 +41,19 @@
     "//testing/gtest",
   ]
 }
+
+source_set("snapshots_internal") {
+  sources = [
+    "snapshot_overlay_provider.h",
+    "web_controller_snapshot_helper.h",
+    "web_controller_snapshot_helper.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/web",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn
new file mode 100644
index 0000000..be04f826
--- /dev/null
+++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -0,0 +1,144 @@
+# 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.
+
+source_set("tabs") {
+  sources = [
+    "tab.h",
+    "tab_delegate.h",
+    "tab_dialog_delegate.h",
+    "tab_model.h",
+    "tab_model_observer.h",
+    "tab_private.h",
+    "tab_snapshotting_delegate.h",
+  ]
+  deps = [
+    "//components/signin/ios/browser",
+    "//ios/net",
+    "//ios/web",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("tabs_internal") {
+  sources = [
+    "tab.mm",
+    "tab_model.mm",
+    "tab_model_order_controller.h",
+    "tab_model_order_controller.mm",
+    "tab_model_synced_window_delegate.h",
+    "tab_model_synced_window_delegate.mm",
+    "tab_model_synced_window_delegate_getter.h",
+    "tab_model_synced_window_delegate_getter.mm",
+  ]
+  deps = [
+    ":tabs",
+    "//base",
+    "//components/content_settings/core/browser",
+    "//components/favicon/core",
+    "//components/favicon/ios",
+    "//components/google/core/browser",
+    "//components/history/core/browser",
+    "//components/history/ios/browser",
+    "//components/infobars/core",
+    "//components/keyed_service/core",
+    "//components/metrics_services_manager",
+    "//components/navigation_metrics",
+    "//components/prefs",
+    "//components/search_engines",
+    "//components/sessions",
+    "//components/signin/core/browser",
+    "//components/signin/ios/browser",
+    "//components/strings",
+    "//components/sync_sessions",
+    "//components/url_formatter",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/autofill:autofill_internal",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/geolocation:geolocation_internal",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
+    "//ios/chrome/browser/net",
+    "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/passwords:passwords_internal",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:signin_internal",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/snapshots:snapshots_internal",
+    "//ios/chrome/browser/ssl",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/translate",
+    "//ios/chrome/browser/u2f",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:browser_list",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/downloads",
+    "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/reader_mode",
+    "//ios/chrome/browser/ui/sad_tab",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/web",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/net",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "CoreLocation.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "tab_model_order_controller_unittest.mm",
+    "tab_model_unittest.mm",
+    "tab_unittest.mm",
+  ]
+  deps = [
+    ":tabs",
+    ":tabs_internal",
+    "//base",
+    "//components/bookmarks/test",
+    "//components/history/core/browser",
+    "//components/keyed_service/core",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/sessions:test_support",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser:test_support",
+    "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
+    "//ios/testing:ocmock_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/test/BUILD.gn b/ios/chrome/browser/test/BUILD.gn
new file mode 100644
index 0000000..f80eac2
--- /dev/null
+++ b/ios/chrome/browser/test/BUILD.gn
@@ -0,0 +1,34 @@
+# 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/public/provider/chrome/browser/build_config.gni")
+
+source_set("perf_test_support") {
+  testonly = true
+  sources = [
+    "perf_test_with_bvc_ios.h",
+    "perf_test_with_bvc_ios.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/bookmarks/test",
+    "//ios/chrome/browser/autocomplete",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/test:test_support",
+    "//ios/chrome/test/base:perf_test_support",
+    "//ios/public/provider/chrome/browser",
+    "//ios/web:test_support",
+
+    # Perf tests can run with any provider, but the resulting numbers will only
+    # be meaningful if ChromeBrowserProviderImpl is used.
+    ios_provider_target,
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/translate/BUILD.gn b/ios/chrome/browser/translate/BUILD.gn
index c2eb31f..46432c0 100644
--- a/ios/chrome/browser/translate/BUILD.gn
+++ b/ios/chrome/browser/translate/BUILD.gn
@@ -49,13 +49,45 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "js_language_detection_manager_unittest.mm",
     "translate_service_ios_unittest.cc",
   ]
   deps = [
     ":translate",
+    "//base",
+    "//base/test:test_support",
+    "//components/translate/ios/browser",
     "//ios/chrome/browser",
+    "//ios/chrome/browser/web:test_support",
+    "//ios/chrome/common",
     "//ios/public/provider/chrome/browser:test_support",
+    "//ios/web",
+    "//ios/web:test_support",
     "//testing/gtest",
     "//url",
   ]
 }
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "translate_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//components/translate/core/browser",
+    "//components/translate/core/common",
+    "//components/translate/ios/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/translate",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//net",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn
index 0a78411..91f2f65 100644
--- a/ios/chrome/browser/ui/BUILD.gn
+++ b/ios/chrome/browser/ui/BUILD.gn
@@ -81,17 +81,61 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "browser_container_view_unittest.mm",
+    "browser_view_controller_unittest.mm",
+    "chrome_web_view_factory_unittest.mm",
+    "file_locations_unittest.mm",
+    "fullscreen_controller_unittest.mm",
+    "key_commands_provider_unittest.mm",
     "native_content_controller_unittest.mm",
     "network_activity_indicator_manager_unittest.mm",
+    "open_in_controller_unittest.mm",
+    "open_in_toolbar_unittest.mm",
+    "page_not_available_controller_unittest.mm",
+    "preload_controller_unittest.mm",
     "ui_util_unittest.mm",
     "uikit_ui_util_unittest.mm",
   ]
   deps = [
     ":native_content_controller_test_xib",
+    ":resources_unit_tests",
+    ":test_support",
     ":ui",
+    ":ui_internal",
     "//base",
+    "//base/test:test_support",
+    "//components/bookmarks/test",
+    "//components/prefs:test_support",
+    "//components/search_engines",
+    "//components/sessions",
+    "//components/toolbar:test_support",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/activity_services",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/toolbar:test_support",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/test:test_support",
+    "//ios/testing:ocmock_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//net:test_support",
+    "//testing/gmock",
     "//testing/gtest",
     "//third_party/ocmock",
+    "//ui/base",
     "//url",
   ]
 }
@@ -174,3 +218,251 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("ui_internal") {
+  sources = [
+    "browser_container_view.h",
+    "browser_container_view.mm",
+    "browser_view_controller.h",
+    "browser_view_controller.mm",
+    "browser_view_controller_dependency_factory.h",
+    "browser_view_controller_dependency_factory.mm",
+    "chrome_web_view_factory.h",
+    "chrome_web_view_factory.mm",
+    "external_file_controller.h",
+    "external_file_controller.mm",
+    "external_file_remover.h",
+    "external_file_remover.mm",
+    "fade_truncated_label.h",
+    "fade_truncated_label.mm",
+    "fullscreen_controller.h",
+    "fullscreen_controller.mm",
+    "key_commands_provider.h",
+    "key_commands_provider.mm",
+    "open_in_controller.h",
+    "open_in_controller.mm",
+    "open_in_controller_testing.h",
+    "open_in_toolbar.h",
+    "open_in_toolbar.mm",
+    "page_not_available_controller.h",
+    "page_not_available_controller.mm",
+    "preload_controller.h",
+    "preload_controller.mm",
+    "preload_controller_delegate.h",
+    "prerender_delegate.h",
+  ]
+  deps = [
+    ":browser_list",
+    "//base",
+    "//base:i18n",
+    "//components/bookmarks/browser",
+    "//components/infobars/core",
+    "//components/prefs",
+    "//components/reading_list/core",
+    "//components/reading_list/ios",
+    "//components/search_engines",
+    "//components/sessions",
+    "//components/strings",
+    "//components/toolbar",
+    "//components/url_formatter",
+    "//ios/chrome/app:tests_hook",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/first_run",
+    "//ios/chrome/browser/geolocation:geolocation_internal",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//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",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/snapshots:snapshots_internal",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:resources",
+    "//ios/chrome/browser/ui/activity_services",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/bookmarks",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/context_menu",
+    "//ios/chrome/browser/ui/contextual_search",
+    "//ios/chrome/browser/ui/dialogs:dialogs_internal",
+    "//ios/chrome/browser/ui/elements:elements_internal",
+    "//ios/chrome/browser/ui/find_bar",
+    "//ios/chrome/browser/ui/first_run",
+    "//ios/chrome/browser/ui/history",
+    "//ios/chrome/browser/ui/keyboard",
+    "//ios/chrome/browser/ui/no_tabs",
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/ntp/recent_tabs",
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+    "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/print",
+    "//ios/chrome/browser/ui/qr_scanner",
+    "//ios/chrome/browser/ui/reading_list",
+    "//ios/chrome/browser/ui/stack_view",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/ui/tab_switcher",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/browser/ui/voice",
+    "//ios/chrome/browser/upgrade",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/common",
+    "//ios/net",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ios/web/public/image_fetcher",
+    "//net",
+    "//third_party/google_toolbox_for_mac",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/side_swipe",
+    "//ios/chrome/browser/ui/toolbar",
+  ]
+  allow_circular_includes_from = [
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/browser/ui/tab_switcher",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/snapshots:snapshots_internal",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/stack_view",
+  ]
+  libs = [
+    "AssetsLibrary.framework",
+    "MessageUI.framework",
+    "MobileCoreServices.framework",
+    "PassKit.framework",
+    "Photos.framework",
+    "QuartzCore.framework",
+    "StoreKit.framework",
+    "UIKit.framework",
+    "WebKit.framework",
+  ]
+}
+
+source_set("browser_list") {
+  sources = [
+    "browser_ios.h",
+    "browser_list_ios.h",
+    "browser_list_ios.mm",
+  ]
+  deps = [
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/tabs",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "browser_view_controller_testing.h",
+    "browser_view_controller_testing.mm",
+  ]
+  deps = [
+    ":ui_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/toolbar:test_support",
+  ]
+}
+
+bundle_data("resources_unit_tests") {
+  visibility = [ ":unit_tests" ]
+  testonly = true
+  sources = [
+    "//ios/chrome/test/data/testbadpass.pkpass",
+    "//ios/chrome/test/data/testpass.pkpass",
+  ]
+  outputs = [
+    "{{bundle_resources_dir}}/ios/chrome/test/data/{{source_file_part}}",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "browser_view_controller_egtest.mm",
+    "error_page_egtest.mm",
+    "fullscreen_egtest.mm",
+    "keyboard_commands_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:earl_grey_test_support",
+    "//ios/web:test_support",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "WebKit.framework",
+    "XCTest.framework",
+  ]
+}
+
+source_set("perf_tests") {
+  testonly = true
+  sources = [
+    "omnibox_perftest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/toolbar:test_support",
+    "//ios/chrome/browser/autocomplete",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/tabs:tabs_internal",
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/test/base:perf_test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base:test_support",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+# Clean skeleton targets
+source_set("ui_clean_skeleton") {
+  sources = [
+    "ui_types.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/actions/BUILD.gn b/ios/chrome/browser/ui/actions/BUILD.gn
new file mode 100644
index 0000000..361b2424
--- /dev/null
+++ b/ios/chrome/browser/ui/actions/BUILD.gn
@@ -0,0 +1,13 @@
+# 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.
+
+source_set("actions") {
+  sources = [
+    "settings_actions.h",
+    "tab_grid_actions.h",
+    "tools_menu_actions.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/activity_services/BUILD.gn b/ios/chrome/browser/ui/activity_services/BUILD.gn
index bbc602f..53b8977 100644
--- a/ios/chrome/browser/ui/activity_services/BUILD.gn
+++ b/ios/chrome/browser/ui/activity_services/BUILD.gn
@@ -26,3 +26,80 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("activity_services") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "activity_service_controller.h",
+    "activity_service_controller.mm",
+    "activity_type_util.h",
+    "activity_type_util.mm",
+    "appex_constants.h",
+    "appex_constants.mm",
+    "chrome_activity_item_source.h",
+    "chrome_activity_item_source.mm",
+    "print_activity.h",
+    "print_activity.mm",
+    "reading_list_activity.h",
+    "reading_list_activity.mm",
+    "share_protocol.h",
+    "share_to_data.h",
+    "share_to_data.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/reading_list/core",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/activity_services:assets",
+    "//ios/chrome/browser/ui/activity_services:resources",
+    "//ios/chrome/browser/ui/commands",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "MobileCoreServices.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "activity_service_controller_unittest.mm",
+    "activity_type_util_unittest.mm",
+  ]
+  deps = [
+    ":activity_services",
+    "//base",
+    "//base/test:test_support",
+    "//components/reading_list/core",
+    "//ios/chrome/app/strings",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "activity_service_controller_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/material_components_ios",
+    "//ios/web:test_support",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/alert_coordinator/BUILD.gn b/ios/chrome/browser/ui/alert_coordinator/BUILD.gn
index ba5bab4..78049b0f 100644
--- a/ios/chrome/browser/ui/alert_coordinator/BUILD.gn
+++ b/ios/chrome/browser/ui/alert_coordinator/BUILD.gn
@@ -37,3 +37,40 @@
     "//ui/strings",
   ]
 }
+
+source_set("alert_coordinator_internal") {
+  sources = [
+    "loading_alert_coordinator.h",
+    "loading_alert_coordinator.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "alert_coordinator_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/animators/BUILD.gn b/ios/chrome/browser/ui/animators/BUILD.gn
new file mode 100644
index 0000000..32c610a
--- /dev/null
+++ b/ios/chrome/browser/ui/animators/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("animators") {
+  sources = [
+    "zoom_transition_animator.h",
+    "zoom_transition_animator.mm",
+    "zoom_transition_delegate.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+  ]
+}
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn
index 96c2912..718a53d 100644
--- a/ios/chrome/browser/ui/authentication/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -12,3 +12,126 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("authentication") {
+  sources = [
+    "authentication_flow.h",
+    "authentication_flow.mm",
+    "authentication_flow_performer.h",
+    "authentication_flow_performer.mm",
+    "authentication_flow_performer_delegate.h",
+    "authentication_ui_util.h",
+    "authentication_ui_util.mm",
+    "chrome_signin_view_controller.h",
+    "chrome_signin_view_controller.mm",
+    "re_signin_infobar_delegate.h",
+    "re_signin_infobar_delegate.mm",
+    "signed_in_accounts_view_controller.h",
+    "signed_in_accounts_view_controller.mm",
+    "signin_account_selector_view_controller.h",
+    "signin_account_selector_view_controller.mm",
+    "signin_confirmation_view_controller.h",
+    "signin_confirmation_view_controller.mm",
+    "signin_interaction_controller.h",
+    "signin_interaction_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/google/core/browser",
+    "//components/infobars/core",
+    "//components/prefs",
+    "//components/signin/core/browser",
+    "//components/signin/core/common",
+    "//components/signin/ios/browser",
+    "//components/strings",
+    "//google_apis",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/authentication:resources",
+    "//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/settings/cells",
+    "//ios/chrome/browser/ui/settings/utils",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/public/provider/chrome/browser/signin",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "authentication_flow_unittest.mm",
+    "re_signin_infobar_delegate_unittest.mm",
+    "signed_in_accounts_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":authentication",
+    "//base",
+    "//base/test:test_support",
+    "//components/pref_registry",
+    "//components/sync_preferences",
+    "//components/sync_preferences:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "signin_interaction_controller_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/signin/core/browser",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/autofill/BUILD.gn b/ios/chrome/browser/ui/autofill/BUILD.gn
index 9b3f89f..0f2627a 100644
--- a/ios/chrome/browser/ui/autofill/BUILD.gn
+++ b/ios/chrome/browser/ui/autofill/BUILD.gn
@@ -25,3 +25,28 @@
     "//ios/public/provider/chrome/browser",
   ]
 }
+
+source_set("autofill_internal") {
+  sources = [
+    "card_unmask_prompt_view_bridge.h",
+    "card_unmask_prompt_view_bridge.mm",
+    "storage_switch_tooltip.h",
+    "storage_switch_tooltip.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/autofill/core/browser",
+    "//components/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/autofill/cells",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/collection_view",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/autofill/cells/BUILD.gn b/ios/chrome/browser/ui/autofill/cells/BUILD.gn
new file mode 100644
index 0000000..8bd7c3e
--- /dev/null
+++ b/ios/chrome/browser/ui/autofill/cells/BUILD.gn
@@ -0,0 +1,50 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("cells") {
+  sources = [
+    "cvc_item.h",
+    "cvc_item.mm",
+    "status_item.h",
+    "status_item.mm",
+    "storage_switch_item.h",
+    "storage_switch_item.mm",
+  ]
+
+  deps = [
+    "//components/resources",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "cvc_item_unittest.mm",
+    "status_item_unittest.mm",
+    "storage_switch_item_unittest.mm",
+  ]
+
+  deps = [
+    ":cells",
+    "//base",
+    "//components/resources",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn
index 4f2fb6b..627dca3 100644
--- a/ios/chrome/browser/ui/bookmarks/BUILD.gn
+++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -78,3 +78,180 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("bookmarks") {
+  sources = [
+    "bookmark_all_collection_view.h",
+    "bookmark_all_collection_view.mm",
+    "bookmark_collection_cells.h",
+    "bookmark_collection_cells.mm",
+    "bookmark_collection_view.h",
+    "bookmark_collection_view.mm",
+    "bookmark_collection_view_background.h",
+    "bookmark_collection_view_background.mm",
+    "bookmark_controller_factory.h",
+    "bookmark_controller_factory.mm",
+    "bookmark_edit_view_controller.h",
+    "bookmark_edit_view_controller.mm",
+    "bookmark_elevated_toolbar.h",
+    "bookmark_elevated_toolbar.mm",
+    "bookmark_extended_button.h",
+    "bookmark_extended_button.mm",
+    "bookmark_folder_collection_view.h",
+    "bookmark_folder_collection_view.mm",
+    "bookmark_folder_editor_view_controller.h",
+    "bookmark_folder_editor_view_controller.mm",
+    "bookmark_folder_table_view_cell.h",
+    "bookmark_folder_table_view_cell.mm",
+    "bookmark_folder_view_controller.h",
+    "bookmark_folder_view_controller.mm",
+    "bookmark_home_handset_view_controller.h",
+    "bookmark_home_handset_view_controller.mm",
+    "bookmark_home_primary_view.h",
+    "bookmark_home_tablet_ntp_controller.h",
+    "bookmark_home_tablet_ntp_controller.mm",
+    "bookmark_home_view_controller.h",
+    "bookmark_home_view_controller.mm",
+    "bookmark_home_waiting_view.h",
+    "bookmark_home_waiting_view.mm",
+    "bookmark_interaction_controller.h",
+    "bookmark_interaction_controller.mm",
+    "bookmark_menu_cell.h",
+    "bookmark_menu_cell.mm",
+    "bookmark_menu_item.h",
+    "bookmark_menu_item.mm",
+    "bookmark_menu_view.h",
+    "bookmark_menu_view.mm",
+    "bookmark_model_bridge_observer.h",
+    "bookmark_model_bridge_observer.mm",
+    "bookmark_navigation_controller.h",
+    "bookmark_navigation_controller.mm",
+    "bookmark_panel_view.h",
+    "bookmark_panel_view.mm",
+    "bookmark_position_cache.h",
+    "bookmark_position_cache.mm",
+    "bookmark_promo_cell.h",
+    "bookmark_promo_cell.mm",
+    "bookmark_promo_controller.h",
+    "bookmark_promo_controller.mm",
+    "bookmark_utils_ios.h",
+    "bookmark_utils_ios.mm",
+    "undo_manager_bridge_observer.h",
+    "undo_manager_bridge_observer.mm",
+    "undo_manager_wrapper.h",
+    "undo_manager_wrapper.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/bookmarks/browser",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/pref_registry",
+    "//components/prefs",
+    "//components/query_parser",
+    "//components/signin/core/browser",
+    "//components/strings",
+    "//components/undo",
+    "//components/url_formatter",
+    "//google_apis",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/bookmarks:bookmarks_utils",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/bookmarks:resources",
+    "//ios/chrome/browser/ui/bookmarks/bars",
+    "//ios/chrome/browser/ui/bookmarks/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/keyboard",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/undo",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//skia",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  allow_circular_includes_from = [
+    "//ios/chrome/browser/ui/bookmarks/bars",
+    "//ios/chrome/browser/ui/bookmarks/cells",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "bookmark_home_view_controller_unittest.mm",
+    "bookmark_ios_unittest.mm",
+    "bookmark_position_cache_unittest.mm",
+    "bookmark_utils_ios_unittest.mm",
+  ]
+  deps = [
+    ":bookmarks",
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/bookmarks/test",
+    "//components/sync_preferences:test_support",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "bookmarks_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/prefs",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/bookmarks:bookmarks_utils",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/bookmarks/bars/BUILD.gn b/ios/chrome/browser/ui/bookmarks/bars/BUILD.gn
new file mode 100644
index 0000000..47c8cfe
--- /dev/null
+++ b/ios/chrome/browser/ui/bookmarks/bars/BUILD.gn
@@ -0,0 +1,25 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("bars") {
+  sources = [
+    "bookmark_editing_bar.h",
+    "bookmark_editing_bar.mm",
+    "bookmark_navigation_bar.h",
+    "bookmark_navigation_bar.mm",
+    "bookmark_top_bar.h",
+    "bookmark_top_bar.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/third_party/material_components_ios",
+    "//ui/base",
+  ]
+  libs = [
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/bookmarks/cells/BUILD.gn b/ios/chrome/browser/ui/bookmarks/cells/BUILD.gn
new file mode 100644
index 0000000..13996b5
--- /dev/null
+++ b/ios/chrome/browser/ui/bookmarks/cells/BUILD.gn
@@ -0,0 +1,45 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("cells") {
+  sources = [
+    "bookmark_parent_folder_item.h",
+    "bookmark_parent_folder_item.mm",
+    "bookmark_text_field_item.h",
+    "bookmark_text_field_item.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "bookmark_parent_folder_item_unittest.mm",
+    "bookmark_text_field_item_unittest.mm",
+  ]
+
+  deps = [
+    ":cells",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/collection_view/BUILD.gn b/ios/chrome/browser/ui/collection_view/BUILD.gn
new file mode 100644
index 0000000..0aafb01
--- /dev/null
+++ b/ios/chrome/browser/ui/collection_view/BUILD.gn
@@ -0,0 +1,54 @@
+# 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.
+
+source_set("collection_view") {
+  sources = [
+    "collection_view_controller.h",
+    "collection_view_controller.mm",
+    "collection_view_model.h",
+    "collection_view_model.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui/material_components",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/third_party/material_components_ios",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "collection_view_controller_test.h",
+    "collection_view_controller_test.mm",
+  ]
+  deps = [
+    ":collection_view",
+    "//base",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/test:test_support",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+    "//ui/base",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "collection_view_controller_unittest.mm",
+    "collection_view_model_unittest.mm",
+  ]
+  deps = [
+    ":collection_view",
+    "//base",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/test:test_support",
+    "//ios/chrome/test/base",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/collection_view/cells/BUILD.gn b/ios/chrome/browser/ui/collection_view/cells/BUILD.gn
new file mode 100644
index 0000000..e6e8c32
--- /dev/null
+++ b/ios/chrome/browser/ui/collection_view/cells/BUILD.gn
@@ -0,0 +1,72 @@
+# 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.
+
+source_set("cells") {
+  sources = [
+    "MDCCollectionViewCell+Chrome.h",
+    "MDCCollectionViewCell+Chrome.mm",
+    "activity_indicator_cell.h",
+    "activity_indicator_cell.mm",
+    "collection_view_account_item.h",
+    "collection_view_account_item.mm",
+    "collection_view_detail_item.h",
+    "collection_view_detail_item.mm",
+    "collection_view_footer_item.h",
+    "collection_view_footer_item.mm",
+    "collection_view_item.h",
+    "collection_view_item.mm",
+    "collection_view_switch_item.h",
+    "collection_view_switch_item.mm",
+    "collection_view_text_item.h",
+    "collection_view_text_item.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+    "//url",
+  ]
+  public_deps = [
+    "//ios/third_party/material_components_ios",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "test_utils.h",
+    "test_utils.mm",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "MDCCollectionViewCell+Chrome_unittest.mm",
+    "activity_indicator_cell_unittest.mm",
+    "collection_view_account_item_unittest.mm",
+    "collection_view_detail_item_unittest.mm",
+    "collection_view_footer_item_unittest.mm",
+    "collection_view_item_unittest.mm",
+    "collection_view_switch_item_unittest.mm",
+    "collection_view_text_item_unittest.mm",
+  ]
+
+  deps = [
+    ":cells",
+    ":test_support",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/colors/BUILD.gn b/ios/chrome/browser/ui/colors/BUILD.gn
new file mode 100644
index 0000000..f49ba7b
--- /dev/null
+++ b/ios/chrome/browser/ui/colors/BUILD.gn
@@ -0,0 +1,14 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("colors") {
+  sources = [
+    "MDCPalette+CrAdditions.h",
+    "MDCPalette+CrAdditions.mm",
+  ]
+  deps = [
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+  ]
+}
diff --git a/ios/chrome/browser/ui/contextual_search/BUILD.gn b/ios/chrome/browser/ui/contextual_search/BUILD.gn
index 40e83396..6d1813a 100644
--- a/ios/chrome/browser/ui/contextual_search/BUILD.gn
+++ b/ios/chrome/browser/ui/contextual_search/BUILD.gn
@@ -30,3 +30,113 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("contextual_search") {
+  sources = [
+    "contextual_search_context.cc",
+    "contextual_search_context.h",
+    "contextual_search_controller.h",
+    "contextual_search_controller.mm",
+    "contextual_search_delegate.cc",
+    "contextual_search_delegate.h",
+    "contextual_search_header_view.h",
+    "contextual_search_header_view.mm",
+    "contextual_search_highlighter_view.h",
+    "contextual_search_highlighter_view.mm",
+    "contextual_search_mask_view.h",
+    "contextual_search_mask_view.mm",
+    "contextual_search_metrics.h",
+    "contextual_search_metrics.mm",
+    "contextual_search_panel_protocols.h",
+    "contextual_search_panel_view.h",
+    "contextual_search_panel_view.mm",
+    "contextual_search_promo_view.h",
+    "contextual_search_promo_view.mm",
+    "contextual_search_results_view.h",
+    "contextual_search_results_view.mm",
+    "contextual_search_web_state_observer.h",
+    "contextual_search_web_state_observer.mm",
+    "js_contextual_search_manager.h",
+    "js_contextual_search_manager.mm",
+    "panel_configuration.h",
+    "panel_configuration.mm",
+    "touch_to_search_permissions_mediator.h",
+    "touch_to_search_permissions_mediator.mm",
+    "window_gesture_observer.h",
+    "window_gesture_observer.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/google/core/browser",
+    "//components/prefs",
+    "//components/search_engines",
+    "//components/variations",
+    "//components/variations/net",
+    "//ios/chrome/app:tests_hook",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/prefs",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/contextual_search:injected_js",
+    "//ios/chrome/browser/ui/contextual_search:resources",
+    "//ios/chrome/browser/ui/contextual_search/protos",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/browser/web",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "touch_to_search_permissions_mediator+testing.h",
+    "touch_to_search_permissions_mediator+testing.mm",
+  ]
+  deps = [
+    ":contextual_search",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "contextual_search_js_unittest.mm",
+    "touch_to_search_permissions_mediator_unittest.mm",
+  ]
+  deps = [
+    ":contextual_search",
+    ":test_support",
+    "//base",
+    "//base/test:test_support",
+    "//components/pref_registry",
+    "//components/prefs",
+    "//components/search_engines",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/sync:test_support",
+    "//ios/chrome/browser/ui/contextual_search:resources_unit_tests",
+    "//ios/chrome/browser/web:test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/ui/contextual_search/protos/BUILD.gn b/ios/chrome/browser/ui/contextual_search/protos/BUILD.gn
new file mode 100644
index 0000000..a882a06
--- /dev/null
+++ b/ios/chrome/browser/ui/contextual_search/protos/BUILD.gn
@@ -0,0 +1,11 @@
+# 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("//third_party/protobuf/proto_library.gni")
+
+proto_library("protos") {
+  sources = [
+    "client_discourse_context.proto",
+  ]
+}
diff --git a/ios/chrome/browser/ui/dialogs/BUILD.gn b/ios/chrome/browser/ui/dialogs/BUILD.gn
index 506aa95..6f7f557 100644
--- a/ios/chrome/browser/ui/dialogs/BUILD.gn
+++ b/ios/chrome/browser/ui/dialogs/BUILD.gn
@@ -32,3 +32,76 @@
 
   configs += [ "//build/config/compiler:enable_arc" ]
 }
+
+source_set("dialogs_internal") {
+  sources = [
+    "dialog_presenter.h",
+    "dialog_presenter.mm",
+    "java_script_dialog_presenter_impl.h",
+    "java_script_dialog_presenter_impl.mm",
+    "nsurl_protection_space_util.h",
+    "nsurl_protection_space_util.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//components/url_formatter",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/dialogs",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests_internal") {
+  testonly = true
+  sources = [
+    "dialog_presenter_unittest.mm",
+    "nsurl_protection_space_util_unittest.mm",
+  ]
+  deps = [
+    ":dialogs_internal",
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/web:test_support",
+    "//ios/web:web",
+    "//testing/gtest",
+    "//ui/base",
+    "//url",
+  ]
+}
+
+source_set("eg_tests") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "javascript_dialog_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/dialogs:dialogs_internal",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/downloads/BUILD.gn b/ios/chrome/browser/ui/downloads/BUILD.gn
index 033ec0c..eafa4b4 100644
--- a/ios/chrome/browser/ui/downloads/BUILD.gn
+++ b/ios/chrome/browser/ui/downloads/BUILD.gn
@@ -32,3 +32,49 @@
 bundle_data_ib_file("download_manager_controller_xib") {
   source = "resources/DownloadManagerController.xib"
 }
+
+source_set("downloads") {
+  sources = [
+    "download_manager_controller.h",
+    "download_manager_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/native_app_launcher",
+    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/downloads:assets",
+    "//ios/chrome/browser/ui/downloads:download_manager_controller_xib",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//ios/web:core",
+    "//net",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "download_manager_controller_unittest.mm",
+  ]
+  deps = [
+    ":downloads",
+    "//base",
+    "//ios/chrome/browser",
+    "//ios/web:test_support",
+    "//net:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/elements/BUILD.gn b/ios/chrome/browser/ui/elements/BUILD.gn
index 4a287e8..2eb19d6 100644
--- a/ios/chrome/browser/ui/elements/BUILD.gn
+++ b/ios/chrome/browser/ui/elements/BUILD.gn
@@ -22,14 +22,33 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "activity_overlay_coordinator_unittest.mm",
     "selector_coordinator_unittest.mm",
     "selector_picker_view_controller_unittest.mm",
   ]
   deps = [
     ":elements",
+    ":elements_internal",
     "//base",
     "//base/test:test_support",
     "//testing/gtest",
     "//third_party/ocmock",
   ]
 }
+
+source_set("elements_internal") {
+  sources = [
+    "activity_overlay_coordinator.h",
+    "activity_overlay_coordinator.mm",
+    "activity_overlay_view_controller.h",
+    "activity_overlay_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/third_party/material_components_ios",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/fancy_ui/BUILD.gn b/ios/chrome/browser/ui/fancy_ui/BUILD.gn
new file mode 100644
index 0000000..7af8ee0e
--- /dev/null
+++ b/ios/chrome/browser/ui/fancy_ui/BUILD.gn
@@ -0,0 +1,36 @@
+# 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.
+
+source_set("fancy_ui") {
+  sources = [
+    "bidi_container_view.h",
+    "bidi_container_view.mm",
+    "primary_action_button.h",
+    "primary_action_button.mm",
+    "tinted_button.h",
+    "tinted_button.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//ios/chrome/browser/ui/colors",
+  ]
+  public_deps = [
+    "//ios/third_party/material_components_ios",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "bidi_container_view_unittest.mm",
+  ]
+  deps = [
+    ":fancy_ui",
+    "//base",
+    "//base:i18n",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/find_bar/BUILD.gn b/ios/chrome/browser/ui/find_bar/BUILD.gn
index ae4b3e8..1d2280e 100644
--- a/ios/chrome/browser/ui/find_bar/BUILD.gn
+++ b/ios/chrome/browser/ui/find_bar/BUILD.gn
@@ -56,3 +56,49 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("find_bar") {
+  sources = [
+    "find_bar_controller_ios.h",
+    "find_bar_controller_ios.mm",
+    "find_bar_touch_forwarding_view.h",
+    "find_bar_touch_forwarding_view.mm",
+    "find_bar_view.h",
+    "find_bar_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/find_bar:resources",
+    "//ios/third_party/material_components_ios",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "find_in_page_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/ui/find_bar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/web:test_support",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/first_run/BUILD.gn b/ios/chrome/browser/ui/first_run/BUILD.gn
index 57823a4..379efcc 100644
--- a/ios/chrome/browser/ui/first_run/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/BUILD.gn
@@ -21,3 +21,103 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("first_run") {
+  sources = [
+    "first_run_chrome_signin_view_controller.h",
+    "first_run_chrome_signin_view_controller.mm",
+    "first_run_histograms.h",
+    "first_run_util.h",
+    "first_run_util.mm",
+    "static_file_view_controller.h",
+    "static_file_view_controller.mm",
+    "welcome_to_chrome_view.h",
+    "welcome_to_chrome_view.mm",
+    "welcome_to_chrome_view_controller.h",
+    "welcome_to_chrome_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/metrics",
+    "//components/prefs",
+    "//components/signin/core/browser",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/crash_report",
+    "//ios/chrome/browser/first_run",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/browser/ui/first_run:assets",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/promos",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/signin",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "first_run_util_unittest.mm",
+    "welcome_to_chrome_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":first_run",
+    "//base",
+    "//components/metrics",
+    "//components/prefs",
+    "//components/prefs:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/test:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "first_run_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/metrics",
+    "//components/prefs",
+    "//components/signin/core/browser",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/geolocation:geolocation_internal",
+    "//ios/chrome/browser/geolocation:test_support",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui/first_run",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/third_party/earl_grey",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/history/BUILD.gn b/ios/chrome/browser/ui/history/BUILD.gn
new file mode 100644
index 0000000..ba1c361c
--- /dev/null
+++ b/ios/chrome/browser/ui/history/BUILD.gn
@@ -0,0 +1,176 @@
+# 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.
+
+source_set("history") {
+  sources = [
+    "clear_browsing_bar.h",
+    "clear_browsing_bar.mm",
+    "favicon_view.h",
+    "favicon_view.mm",
+    "favicon_view_provider.h",
+    "favicon_view_provider.mm",
+    "history_collection_view_controller.h",
+    "history_collection_view_controller.mm",
+    "history_entries_status_item.h",
+    "history_entries_status_item.mm",
+    "history_entry.cc",
+    "history_entry.h",
+    "history_entry_inserter.h",
+    "history_entry_inserter.mm",
+    "history_entry_item.h",
+    "history_entry_item.mm",
+    "history_panel_view_controller.h",
+    "history_panel_view_controller.mm",
+    "history_search_view.h",
+    "history_search_view.mm",
+    "history_search_view_controller.h",
+    "history_search_view_controller.mm",
+    "history_service_facade.h",
+    "history_service_facade.mm",
+    "history_service_facade_delegate.h",
+    "history_util.h",
+    "history_util.mm",
+    "tab_history_cell.h",
+    "tab_history_cell.mm",
+    "tab_history_popup_controller.h",
+    "tab_history_popup_controller.mm",
+    "tab_history_view_controller.h",
+    "tab_history_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/browser_sync",
+    "//components/browsing_data/core",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/history/core/browser",
+    "//components/keyed_service/core",
+    "//components/prefs",
+    "//components/query_parser",
+    "//components/strings",
+    "//components/sync/protocol",
+    "//components/url_formatter",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui",
+    "//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/context_menu",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/ntp/recent_tabs/views",
+    "//ios/chrome/browser/ui/popup_menu",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//skia",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [
+    "MobileCoreServices.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "favicon_view_provider_unittest.mm",
+    "history_collection_view_controller_unittest.mm",
+    "history_entries_status_item_unittest.mm",
+    "history_entry_inserter_unittest.mm",
+    "history_entry_item_unittest.mm",
+    "history_search_view_controller_unittest.mm",
+    "history_service_facade_unittest.mm",
+    "history_util_unittest.mm",
+    "tab_history_popup_controller_unittest.mm",
+  ]
+  deps = [
+    ":history",
+    ":resources_unit_tests",
+    "//base",
+    "//base/test:test_support",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/history/core/browser",
+    "//components/keyed_service/core",
+    "//components/sessions",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common",
+    "//ios/chrome/test:test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//skia",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+}
+
+bundle_data("resources_unit_tests") {
+  visibility = [ ":unit_tests" ]
+  testonly = true
+  sources = [
+    "//ios/chrome/test/data/favicon/test_favicon.png",
+  ]
+  outputs = [
+    "{{bundle_resources_dir}}/" +
+        "ios/chrome/test/data/favicon/{{source_file_part}}",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "history_ui_egtest.mm",
+    "tab_history_popup_controller_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/browsing_data/core",
+    "//components/prefs",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/ui/history",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//net",
+    "//ui/base",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/icons/BUILD.gn b/ios/chrome/browser/ui/icons/BUILD.gn
index 8ecfe91..8114034 100644
--- a/ios/chrome/browser/ui/icons/BUILD.gn
+++ b/ios/chrome/browser/ui/icons/BUILD.gn
@@ -29,3 +29,34 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("icons") {
+  sources = [
+    "chrome_icon.h",
+    "chrome_icon.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/icons:assets",
+    "//ui/base",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "chrome_icon_unittest.mm",
+  ]
+  deps = [
+    ":icons",
+    "//ios/chrome/app/strings",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+  ]
+}
diff --git a/ios/chrome/browser/ui/infobars/BUILD.gn b/ios/chrome/browser/ui/infobars/BUILD.gn
index b23164c..1f0e2f4 100644
--- a/ios/chrome/browser/ui/infobars/BUILD.gn
+++ b/ios/chrome/browser/ui/infobars/BUILD.gn
@@ -26,3 +26,61 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("infobars") {
+  sources = [
+    "infobar_view.h",
+    "infobar_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/browser/ui/infobars:resources",
+    "//ios/chrome/browser/ui/util",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/third_party/material_components_ios",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "infobar_view_unittest.mm",
+  ]
+  deps = [
+    ":infobars",
+    "//testing/gtest",
+  ]
+}
+
+source_set("eg_tests") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "infobar_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/infobars/core",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//url",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn
new file mode 100644
index 0000000..e7ea0ca
--- /dev/null
+++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -0,0 +1,53 @@
+# 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.
+
+source_set("main") {
+  sources = [
+    "browser_view_information.h",
+    "browser_view_wrangler.h",
+    "browser_view_wrangler.mm",
+    "main_coordinator.h",
+    "main_coordinator.mm",
+    "main_view_controller.h",
+    "main_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/browsing_data:browsing_data_internal",
+    "//ios/chrome/browser/crash_report:crash_report_internal",
+    "//ios/chrome/browser/device_sharing",
+    "//ios/chrome/browser/physical_web",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/tabs:tabs_internal",
+    "//ios/public/provider/chrome/browser",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui:ui_internal",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "browser_view_wrangler_unittest.mm",
+    "main_coordinator_unittest.mm",
+    "main_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":main",
+    "//base",
+    "//components/bookmarks/test",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/web:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/material_components/BUILD.gn b/ios/chrome/browser/ui/material_components/BUILD.gn
new file mode 100644
index 0000000..63e674f
--- /dev/null
+++ b/ios/chrome/browser/ui/material_components/BUILD.gn
@@ -0,0 +1,18 @@
+# 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.
+
+source_set("material_components") {
+  sources = [
+    "activity_indicator.h",
+    "activity_indicator.mm",
+    "app_bar_presenting.h",
+    "utils.h",
+    "utils.mm",
+  ]
+  deps = [
+    "//ios/chrome/browser/ui/colors",
+    "//ios/third_party/material_components_ios",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/no_tabs/BUILD.gn b/ios/chrome/browser/ui/no_tabs/BUILD.gn
new file mode 100644
index 0000000..e243a5d
--- /dev/null
+++ b/ios/chrome/browser/ui/no_tabs/BUILD.gn
@@ -0,0 +1,34 @@
+# 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.
+
+source_set("no_tabs") {
+  sources = [
+    "no_tabs_controller.h",
+    "no_tabs_controller.mm",
+    "no_tabs_controller_testing.h",
+    "no_tabs_toolbar_controller.h",
+    "no_tabs_toolbar_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "no_tabs_controller_unittest.mm",
+  ]
+  deps = [
+    ":no_tabs",
+    "//base",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn
index d16c6993..4ea93cdb 100644
--- a/ios/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -100,3 +100,179 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("ntp") {
+  sources = [
+    "new_tab_page_panel_protocol.h",
+  ]
+}
+
+source_set("ntp_internal") {
+  sources = [
+    "centering_scrollview.h",
+    "centering_scrollview.mm",
+    "google_landing_controller.h",
+    "google_landing_controller.mm",
+    "incognito_panel_controller.h",
+    "incognito_panel_controller.mm",
+    "most_visited_cell.h",
+    "most_visited_cell.mm",
+    "most_visited_layout.h",
+    "most_visited_layout.mm",
+    "new_tab_page_bar.h",
+    "new_tab_page_bar.mm",
+    "new_tab_page_bar_button.h",
+    "new_tab_page_bar_button.mm",
+    "new_tab_page_bar_item.h",
+    "new_tab_page_bar_item.mm",
+    "new_tab_page_controller.h",
+    "new_tab_page_controller.mm",
+    "new_tab_page_header_constants.h",
+    "new_tab_page_header_constants.mm",
+    "new_tab_page_header_view.h",
+    "new_tab_page_header_view.mm",
+    "new_tab_page_panel_protocol.mm",
+    "new_tab_page_toolbar_controller.h",
+    "new_tab_page_toolbar_controller.mm",
+    "new_tab_page_view.h",
+    "new_tab_page_view.mm",
+    "notification_promo_whats_new.h",
+    "notification_promo_whats_new.mm",
+    "whats_new_header_view.h",
+    "whats_new_header_view.mm",
+  ]
+  deps = [
+    ":ntp",
+    "//base",
+    "//base:i18n",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/google/core/browser",
+    "//components/history/core/browser",
+    "//components/keyed_service/core",
+    "//components/metrics",
+    "//components/ntp_tiles",
+    "//components/prefs",
+    "//components/rappor",
+    "//components/reading_list/core",
+    "//components/search_engines",
+    "//components/strings",
+    "//components/suggestions",
+    "//components/sync_sessions",
+    "//components/toolbar",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/ntp_tiles",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/suggestions",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/bookmarks",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/context_menu",
+    "//ios/chrome/browser/ui/ntp:resources",
+    "//ios/chrome/browser/ui/ntp/recent_tabs",
+    "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/toolbar:resource_macros",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/public/provider/chrome/browser/ui",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//skia",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "centering_scrollview_unittest.mm",
+    "google_landing_controller_unittest.mm",
+    "most_visited_cell_unittest.mm",
+    "new_tab_page_bar_unittest.mm",
+    "new_tab_page_controller_unittest.mm",
+    "notification_promo_whats_new_unittest.mm",
+  ]
+  deps = [
+    ":ntp",
+    ":ntp_internal",
+    "//base",
+    "//base/test:test_support",
+    "//components/bookmarks/test",
+    "//components/metrics",
+    "//components/prefs:test_support",
+    "//components/search_engines",
+    "//components/sessions",
+    "//components/variations",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+    "//url",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "new_tab_page_egtest.mm",
+  ]
+  deps = [
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
+
+source_set("perf_tests") {
+  testonly = true
+  sources = [
+    "new_tab_page_perftest.mm",
+  ]
+  deps = [
+    "//base/test:test_support",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/test:perf_test_support",
+    "//ios/chrome/browser/ui:ui_internal",
+  ]
+}
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/BUILD.gn b/ios/chrome/browser/ui/ntp/recent_tabs/BUILD.gn
new file mode 100644
index 0000000..5317f199
--- /dev/null
+++ b/ios/chrome/browser/ui/ntp/recent_tabs/BUILD.gn
@@ -0,0 +1,92 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("recent_tabs") {
+  sources = [
+    "recent_tabs_bridges.h",
+    "recent_tabs_bridges.mm",
+    "recent_tabs_panel_controller.h",
+    "recent_tabs_panel_controller.mm",
+    "recent_tabs_panel_view_controller.h",
+    "recent_tabs_panel_view_controller.mm",
+    "recent_tabs_table_view_controller.h",
+    "recent_tabs_table_view_controller.mm",
+    "sessions_sync_user_state.h",
+    "synced_sessions.h",
+    "synced_sessions.mm",
+    "synced_sessions_bridge.h",
+    "synced_sessions_bridge.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/browser_sync",
+    "//components/sessions",
+    "//components/signin/core/browser",
+    "//components/sync",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/context_menu",
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/ntp/recent_tabs/views",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  public_deps = [
+    "//components/sync_sessions",
+  ]
+  allow_circular_includes_from =
+      [ "//ios/chrome/browser/ui/ntp/recent_tabs/views" ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "recent_tabs_panel_controller_unittest.mm",
+  ]
+  deps = [
+    ":recent_tabs",
+    "//base",
+    "//components/browser_sync",
+    "//components/browser_sync:test_support",
+    "//components/signin/core/browser",
+    "//components/sync_sessions",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/sync:test_support",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/test:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "recent_tabs_panel_controller_egtest.mm",
+  ]
+  deps = [
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/views/BUILD.gn b/ios/chrome/browser/ui/ntp/recent_tabs/views/BUILD.gn
new file mode 100644
index 0000000..2a203c2
--- /dev/null
+++ b/ios/chrome/browser/ui/ntp/recent_tabs/views/BUILD.gn
@@ -0,0 +1,52 @@
+# 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.
+
+source_set("views") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "disclosure_view.h",
+    "disclosure_view.mm",
+    "generic_section_header_view.h",
+    "generic_section_header_view.mm",
+    "header_of_collapsable_section_protocol.h",
+    "panel_bar_view.h",
+    "panel_bar_view.mm",
+    "session_section_header_view.h",
+    "session_section_header_view.mm",
+    "session_tab_data_view.h",
+    "session_tab_data_view.mm",
+    "show_full_history_view.h",
+    "show_full_history_view.mm",
+    "signed_in_sync_in_progress_view.h",
+    "signed_in_sync_in_progress_view.mm",
+    "signed_in_sync_off_view.h",
+    "signed_in_sync_off_view.mm",
+    "signed_in_sync_on_no_sessions_view.h",
+    "signed_in_sync_on_no_sessions_view.mm",
+    "signed_out_view.h",
+    "signed_out_view.mm",
+    "spacers_view.h",
+    "spacers_view.mm",
+    "views_utils.h",
+    "views_utils.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/resources",
+    "//components/sessions",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/ui/tab_switcher:utils",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/omnibox/BUILD.gn b/ios/chrome/browser/ui/omnibox/BUILD.gn
index 8deca11..7bf0059 100644
--- a/ios/chrome/browser/ui/omnibox/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/BUILD.gn
@@ -30,3 +30,109 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("omnibox_internal") {
+  sources = [
+    "chrome_omnibox_client_ios.h",
+    "chrome_omnibox_client_ios.mm",
+    "location_bar_view_ios.h",
+    "location_bar_view_ios.mm",
+    "omnibox_popup_material_row.h",
+    "omnibox_popup_material_row.mm",
+    "omnibox_popup_material_view_controller.h",
+    "omnibox_popup_material_view_controller.mm",
+    "omnibox_popup_positioner.h",
+    "omnibox_popup_view_ios.h",
+    "omnibox_popup_view_ios.mm",
+    "omnibox_text_field_ios.h",
+    "omnibox_text_field_ios.mm",
+    "omnibox_view_ios.h",
+    "omnibox_view_ios.mm",
+    "page_info_model.cc",
+    "page_info_model.h",
+    "page_info_model_observer.h",
+    "page_info_view_controller.h",
+    "page_info_view_controller.mm",
+    "preload_provider.h",
+    "truncating_attributed_label.h",
+    "truncating_attributed_label.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/favicon/ios",
+    "//components/keyed_service/core",
+    "//components/open_from_clipboard",
+    "//components/resources",
+    "//components/search_engines",
+    "//components/ssl_errors",
+    "//components/strings",
+    "//components/toolbar",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autocomplete",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/bookmarks:bookmarks_utils",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/net",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/browser/ui/omnibox",
+    "//ios/chrome/browser/ui/omnibox:resources",
+    "//ios/chrome/browser/ui/popup_menu",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//ios/web/public/image_fetcher",
+    "//net",
+    "//skia",
+    "//third_party/google_toolbox_for_mac",
+    "//ui/base",
+    "//ui/gfx",
+    "//ui/gfx/geometry",
+    "//url",
+  ]
+  public_deps = [
+    "//components/omnibox/browser",
+  ]
+  libs = [
+    "CoreText.framework",
+    "MobileCoreServices.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "omnibox_text_field_ios_unittest.mm",
+  ]
+  deps = [
+    ":omnibox_internal",
+    ":resources_unit_tests",
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//testing/gtest",
+    "//ui/base",
+  ]
+}
+
+bundle_data("resources_unit_tests") {
+  visibility = [ ":unit_tests" ]
+  testonly = true
+  sources = [
+    "//ios/chrome/test/data/omnibox/selected_ranges.txt",
+  ]
+  outputs = [
+    "{{bundle_resources_dir}}/" +
+        "ios/chrome/test/data/omnibox/{{source_file_part}}",
+  ]
+}
diff --git a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
index 5a3642f..ab71ac6 100644
--- a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
+++ b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
@@ -27,3 +27,29 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("overscroll_actions") {
+  sources = [
+    "overscroll_actions_controller.h",
+    "overscroll_actions_controller.mm",
+    "overscroll_actions_view.h",
+    "overscroll_actions_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/overscroll_actions:resources",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/browser/ui/voice",
+    "//ios/web",
+    "//ui/base",
+  ]
+  allow_circular_includes_from = [ "//ios/chrome/browser/ui/static_content" ]
+  libs = [
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/popup_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/BUILD.gn
index 7ac0c67..7d59bd4a 100644
--- a/ios/chrome/browser/ui/popup_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/BUILD.gn
@@ -12,3 +12,24 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("popup_menu") {
+  sources = [
+    "popup_menu_controller.h",
+    "popup_menu_controller.mm",
+    "popup_menu_view.h",
+    "popup_menu_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/popup_menu:resources",
+    "//ios/chrome/common",
+    "//ui/base",
+  ]
+  libs = [
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/presenters/BUILD.gn b/ios/chrome/browser/ui/presenters/BUILD.gn
new file mode 100644
index 0000000..99e39183
--- /dev/null
+++ b/ios/chrome/browser/ui/presenters/BUILD.gn
@@ -0,0 +1,13 @@
+# 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.
+
+source_set("presenters") {
+  sources = [
+    "menu_presentation_controller.h",
+    "menu_presentation_controller.mm",
+    "menu_presentation_delegate.h",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/print/BUILD.gn b/ios/chrome/browser/ui/print/BUILD.gn
new file mode 100644
index 0000000..3b1f3ad
--- /dev/null
+++ b/ios/chrome/browser/ui/print/BUILD.gn
@@ -0,0 +1,42 @@
+# 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.
+
+source_set("print") {
+  sources = [
+    "print_controller.h",
+    "print_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/alert_coordinator:alert_coordinator_internal",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "print_controller_egtest.mm",
+  ]
+  deps = [
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/promos/BUILD.gn b/ios/chrome/browser/ui/promos/BUILD.gn
new file mode 100644
index 0000000..655326c
--- /dev/null
+++ b/ios/chrome/browser/ui/promos/BUILD.gn
@@ -0,0 +1,49 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("promos") {
+  sources = [
+    "promo_view_controller.h",
+    "signin_promo_view_controller.h",
+    "signin_promo_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/signin/core/browser",
+    "//components/version_info",
+    "//ios/chrome/app:tests_hook",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/signin",
+    "//net",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "signin_promo_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":promos",
+    "//base",
+    "//components/pref_registry",
+    "//components/sync_preferences",
+    "//components/sync_preferences:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/ui/qr_scanner/BUILD.gn b/ios/chrome/browser/ui/qr_scanner/BUILD.gn
index 3fbb672b..8116491 100644
--- a/ios/chrome/browser/ui/qr_scanner/BUILD.gn
+++ b/ios/chrome/browser/ui/qr_scanner/BUILD.gn
@@ -21,3 +21,67 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("qr_scanner") {
+  sources = [
+    "camera_controller.h",
+    "camera_controller.mm",
+    "qr_scanner_alerts.h",
+    "qr_scanner_alerts.mm",
+    "qr_scanner_transitioning_delegate.h",
+    "qr_scanner_transitioning_delegate.mm",
+    "qr_scanner_view.h",
+    "qr_scanner_view.mm",
+    "qr_scanner_view_controller.h",
+    "qr_scanner_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/version_info",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/qr_scanner:assets",
+    "//ios/chrome/common:ios_app_bundle_id_prefix_header",
+    "//ios/third_party/material_components_ios",
+    "//ui/base",
+  ]
+  libs = [
+    "AVFoundation.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "qr_scanner_view_controller_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/strings",
+    "//components/version_info",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/qr_scanner",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/base",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//third_party/ocmock",
+    "//ui/base",
+  ]
+  libs = [
+    "AVFoundation.framework",
+    "UIKit.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/reader_mode/BUILD.gn b/ios/chrome/browser/ui/reader_mode/BUILD.gn
new file mode 100644
index 0000000..4916f60
--- /dev/null
+++ b/ios/chrome/browser/ui/reader_mode/BUILD.gn
@@ -0,0 +1,31 @@
+# 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.
+
+source_set("reader_mode") {
+  sources = [
+    "reader_mode_checker.h",
+    "reader_mode_checker.mm",
+    "reader_mode_controller.h",
+    "reader_mode_controller.mm",
+    "reader_mode_infobar_delegate.h",
+    "reader_mode_infobar_delegate.mm",
+    "reader_mode_view.h",
+    "reader_mode_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/dom_distiller/core",
+    "//components/infobars/core",
+    "//components/resources",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/dom_distiller",
+    "//ios/chrome/browser/infobars",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/reading_list/BUILD.gn b/ios/chrome/browser/ui/reading_list/BUILD.gn
index 7a673fd..924867c 100644
--- a/ios/chrome/browser/ui/reading_list/BUILD.gn
+++ b/ios/chrome/browser/ui/reading_list/BUILD.gn
@@ -24,3 +24,107 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("reading_list") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "number_badge_view.h",
+    "number_badge_view.mm",
+    "offline_page_native_content.h",
+    "offline_page_native_content.mm",
+    "reading_list_collection_view_item.h",
+    "reading_list_collection_view_item.mm",
+    "reading_list_menu_notification_delegate.h",
+    "reading_list_menu_notifier.h",
+    "reading_list_menu_notifier.mm",
+    "reading_list_side_swipe_provider.h",
+    "reading_list_side_swipe_provider.mm",
+    "reading_list_toolbar.h",
+    "reading_list_toolbar.mm",
+    "reading_list_view_controller.h",
+    "reading_list_view_controller.mm",
+    "reading_list_view_controller_builder.h",
+    "reading_list_view_controller_builder.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/prefs",
+    "//components/reading_list/core",
+    "//components/strings",
+    "//components/url_formatter",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/reading_list:resources",
+    "//ios/chrome/browser/ui/side_swipe",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/chrome/common",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  public_deps = [
+    "//components/reading_list/ios",
+    "//ios/chrome/browser/ui/collection_view",
+  ]
+  allow_circular_includes_from = [ "//ios/chrome/browser/ui/side_swipe" ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "offline_page_native_content_unittest.mm",
+    "reading_list_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":reading_list",
+    "//base",
+    "//components/favicon/core",
+    "//components/prefs",
+    "//components/reading_list/ios",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "reading_list_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/reading_list/ios",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/sad_tab/BUILD.gn b/ios/chrome/browser/ui/sad_tab/BUILD.gn
new file mode 100644
index 0000000..7b92411f
--- /dev/null
+++ b/ios/chrome/browser/ui/sad_tab/BUILD.gn
@@ -0,0 +1,27 @@
+# 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.
+
+source_set("sad_tab") {
+  sources = [
+    "sad_tab_view.h",
+    "sad_tab_view.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/resources",
+    "//components/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/util",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index c006f69..e358659 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -24,3 +24,360 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("settings") {
+  sources = [
+    "about_chrome_collection_view_controller.h",
+    "about_chrome_collection_view_controller.mm",
+    "accounts_collection_view_controller.h",
+    "accounts_collection_view_controller.mm",
+    "autofill_collection_view_controller.h",
+    "autofill_collection_view_controller.mm",
+    "autofill_credit_card_edit_collection_view_controller.h",
+    "autofill_credit_card_edit_collection_view_controller.mm",
+    "autofill_edit_accessory_view.h",
+    "autofill_edit_accessory_view.mm",
+    "autofill_edit_collection_view_controller.h",
+    "autofill_edit_collection_view_controller.mm",
+    "autofill_profile_edit_collection_view_controller.h",
+    "autofill_profile_edit_collection_view_controller.mm",
+    "bandwidth_management_collection_view_controller.h",
+    "bandwidth_management_collection_view_controller.mm",
+    "bar_button_activity_indicator.h",
+    "bar_button_activity_indicator.mm",
+    "block_popups_collection_view_controller.h",
+    "block_popups_collection_view_controller.mm",
+    "clear_browsing_data_collection_view_controller.h",
+    "clear_browsing_data_collection_view_controller.mm",
+    "content_settings_collection_view_controller.h",
+    "content_settings_collection_view_controller.mm",
+    "contextual_search_collection_view_controller.h",
+    "contextual_search_collection_view_controller.mm",
+    "dataplan_usage_collection_view_controller.h",
+    "dataplan_usage_collection_view_controller.mm",
+    "do_not_track_collection_view_controller.h",
+    "do_not_track_collection_view_controller.mm",
+    "handoff_collection_view_controller.h",
+    "handoff_collection_view_controller.mm",
+    "import_data_collection_view_controller.h",
+    "import_data_collection_view_controller.mm",
+    "material_cell_catalog_view_controller.h",
+    "material_cell_catalog_view_controller.mm",
+    "native_apps_collection_view_controller.h",
+    "native_apps_collection_view_controller.mm",
+    "native_apps_collection_view_controller_private.h",
+    "password_details_collection_view_controller.h",
+    "password_details_collection_view_controller.mm",
+    "physical_web_collection_view_controller.h",
+    "physical_web_collection_view_controller.mm",
+    "privacy_collection_view_controller.h",
+    "privacy_collection_view_controller.mm",
+    "reauthentication_module.h",
+    "reauthentication_module.mm",
+    "reauthentication_protocol.h",
+    "save_passwords_collection_view_controller.h",
+    "save_passwords_collection_view_controller.mm",
+    "search_engine_settings_collection_view_controller.h",
+    "search_engine_settings_collection_view_controller.mm",
+    "settings_collection_view_controller.h",
+    "settings_collection_view_controller.mm",
+    "settings_navigation_controller.h",
+    "settings_navigation_controller.mm",
+    "settings_root_collection_view_controller.h",
+    "settings_root_collection_view_controller.mm",
+    "settings_utils.h",
+    "settings_utils.mm",
+    "sync_create_passphrase_collection_view_controller.h",
+    "sync_create_passphrase_collection_view_controller.mm",
+    "sync_encryption_collection_view_controller.h",
+    "sync_encryption_collection_view_controller.mm",
+    "sync_encryption_passphrase_collection_view_controller.h",
+    "sync_encryption_passphrase_collection_view_controller.mm",
+    "sync_settings_collection_view_controller.h",
+    "sync_settings_collection_view_controller.mm",
+    "time_range_selector_collection_view_controller.h",
+    "time_range_selector_collection_view_controller.mm",
+    "translate_collection_view_controller.h",
+    "translate_collection_view_controller.mm",
+    "voicesearch_collection_view_controller.h",
+    "voicesearch_collection_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/autofill/core/browser",
+    "//components/autofill/core/common",
+    "//components/autofill/ios/browser",
+    "//components/browser_sync",
+    "//components/browsing_data/core",
+    "//components/content_settings/core/browser",
+    "//components/content_settings/core/common",
+    "//components/google/core/browser",
+    "//components/handoff",
+    "//components/history/core/browser",
+    "//components/keyed_service/core",
+    "//components/metrics",
+    "//components/password_manager/core/browser",
+    "//components/password_manager/core/common",
+    "//components/physical_web/data_source",
+    "//components/prefs",
+    "//components/resources",
+    "//components/search_engines",
+    "//components/signin/core/browser",
+    "//components/signin/core/common",
+    "//components/signin/ios/browser",
+    "//components/strings",
+    "//components/sync",
+    "//components/translate/core/browser",
+    "//components/translate/core/common",
+    "//components/url_formatter",
+    "//components/version_info",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/autofill:autofill_internal",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:browser_state_impl",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
+    "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/physical_web",
+    "//ios/chrome/browser/prefs",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/translate",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/alert_coordinator",
+    "//ios/chrome/browser/ui/authentication",
+    "//ios/chrome/browser/ui/autofill/cells",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/contextual_search",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/keyboard",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/settings:resources",
+    "//ios/chrome/browser/ui/settings/cells",
+    "//ios/chrome/browser/ui/settings/utils",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/voice",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/public/provider/chrome/browser/native_app_launcher",
+    "//ios/public/provider/chrome/browser/signin",
+    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/collection_view/cells",
+  ]
+  allow_circular_includes_from = [ "//ios/chrome/browser/ui/authentication" ]
+  libs = [
+    "CoreLocation.framework",
+    "LocalAuthentication.framework",
+    "StoreKit.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "passphrase_collection_view_controller_test.h",
+    "passphrase_collection_view_controller_test.mm",
+  ]
+  deps = [
+    ":settings",
+    "//base",
+    "//components/browser_sync",
+    "//components/browser_sync:test_support",
+    "//components/keyed_service/core",
+    "//components/pref_registry",
+    "//components/sync",
+    "//components/sync_preferences",
+    "//components/sync_preferences:test_support",
+    "//google_apis",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/sync:test_support",
+    "//ios/chrome/browser/ui/collection_view:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "about_chrome_collection_view_controller_unittest.mm",
+    "autofill_collection_view_controller_unittest.mm",
+    "autofill_profile_edit_collection_view_controller_unittest.mm",
+    "bandwidth_management_collection_view_controller_unittest.mm",
+    "block_popups_collection_view_controller_unittest.mm",
+    "clear_browsing_data_collection_view_controller_unittest.mm",
+    "content_settings_collection_view_controller_unittest.mm",
+    "contextual_search_collection_view_controller_unittest.mm",
+    "dataplan_usage_collection_view_controller_unittest.mm",
+    "do_not_track_collection_view_controller_unittest.mm",
+    "import_data_collection_view_controller_unittest.mm",
+    "native_apps_collection_view_controller_unittest.mm",
+    "password_details_collection_view_controller_unittest.mm",
+    "physical_web_collection_view_controller_unittest.mm",
+    "privacy_collection_view_controller_unittest.mm",
+    "save_passwords_collection_view_controller_unittest.mm",
+    "search_engine_settings_collection_view_controller_unittest.mm",
+    "settings_navigation_controller_unittest.mm",
+    "settings_root_collection_view_controller_unittest.mm",
+    "sync_create_passphrase_collection_view_controller_unittest.mm",
+    "sync_encryption_collection_view_controller_unittest.mm",
+    "sync_encryption_passphrase_collection_view_controller_unittest.mm",
+    "sync_settings_collection_view_controller_unittest.mm",
+    "time_range_selector_collection_view_controller_unittest.mm",
+    "translate_collection_view_controller_unittest.mm",
+    "voicesearch_collection_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":settings",
+    ":test_support",
+    "//base",
+    "//base/test:test_support",
+    "//components/autofill/core/browser",
+    "//components/autofill/core/common",
+    "//components/browser_sync:test_support",
+    "//components/browsing_data/core",
+    "//components/content_settings/core/browser",
+    "//components/google/core/browser",
+    "//components/handoff",
+    "//components/password_manager/core/browser:test_support",
+    "//components/pref_registry",
+    "//components/prefs:test_support",
+    "//components/search_engines",
+    "//components/signin/core/browser:test_support",
+    "//components/strings",
+    "//components/sync_preferences",
+    "//components/sync_preferences:test_support",
+    "//components/translate/core/browser",
+    "//components/translate/core/common",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/autofill:autofill_internal",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/physical_web",
+    "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/sync:test_support",
+    "//ios/chrome/browser/translate",
+    "//ios/chrome/browser/ui/collection_view",
+    "//ios/chrome/browser/ui/collection_view:test_support",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/contextual_search",
+    "//ios/chrome/browser/ui/icons",
+    "//ios/chrome/browser/ui/settings/cells",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/voice",
+    "//ios/chrome/browser/web:test_support",
+    "//ios/chrome/common",
+    "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//net:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+    "//url",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "accounts_collection_egtest.mm",
+    "autofill_settings_egtest.mm",
+    "block_popups_egtest.mm",
+    "clear_browsing_data_egtest.mm",
+    "settings_egtest.mm",
+    "translate_ui_egtest.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//components/browsing_data/core",
+    "//components/content_settings/core/browser",
+    "//components/metrics",
+    "//components/password_manager/core/common",
+    "//components/prefs",
+    "//components/search_engines",
+    "//components/signin/core/browser",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
+
+# Clean Skeleton targets.
+source_set("settings_clean_skeleton") {
+  sources = [
+    "settings_coordinator.h",
+    "settings_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":settings",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/ui/actions",
+  ]
+}
diff --git a/ios/chrome/browser/ui/settings/cells/BUILD.gn b/ios/chrome/browser/ui/settings/cells/BUILD.gn
new file mode 100644
index 0000000..74d8d7c5
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/cells/BUILD.gn
@@ -0,0 +1,87 @@
+# 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.
+
+source_set("cells") {
+  sources = [
+    "account_control_item.h",
+    "account_control_item.mm",
+    "account_signin_item.h",
+    "account_signin_item.mm",
+    "autofill_data_item.h",
+    "autofill_data_item.mm",
+    "autofill_edit_item.h",
+    "autofill_edit_item.mm",
+    "byo_textfield_item.h",
+    "byo_textfield_item.mm",
+    "card_multiline_item.h",
+    "card_multiline_item.mm",
+    "copied_to_chrome_item.h",
+    "copied_to_chrome_item.mm",
+    "encryption_item.h",
+    "encryption_item.mm",
+    "import_data_multiline_detail_cell.h",
+    "import_data_multiline_detail_cell.mm",
+    "native_app_item.h",
+    "native_app_item.mm",
+    "passphrase_error_item.h",
+    "passphrase_error_item.mm",
+    "password_details_item.h",
+    "password_details_item.mm",
+    "sync_switch_item.h",
+    "sync_switch_item.mm",
+    "text_and_error_item.h",
+    "text_and_error_item.mm",
+    "version_item.h",
+    "version_item.mm",
+  ]
+
+  deps = [
+    "//components/autofill/core/browser",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "account_control_item_unittest.mm",
+    "account_signin_item_unittest.mm",
+    "autofill_data_item_unittest.mm",
+    "autofill_edit_item_unittest.mm",
+    "byo_textfield_item_unittest.mm",
+    "card_multiline_item_unittest.mm",
+    "copied_to_chrome_item_unittest.mm",
+    "encryption_item_unittest.mm",
+    "import_data_multiline_detail_cell_unittest.mm",
+    "native_app_item_unittest.mm",
+    "passphrase_error_item_unittest.mm",
+    "password_details_item_unittest.mm",
+    "sync_switch_item_unittest.mm",
+    "text_and_error_item_unittest.mm",
+    "version_item_unittest.mm",
+  ]
+
+  deps = [
+    ":cells",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/collection_view/cells:test_support",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/third_party/material_components_ios",
+    "//testing/gtest",
+    "//ui/base",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/settings/utils/BUILD.gn b/ios/chrome/browser/ui/settings/utils/BUILD.gn
new file mode 100644
index 0000000..3f450298
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/utils/BUILD.gn
@@ -0,0 +1,57 @@
+# 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.
+
+source_set("utils") {
+  sources = [
+    "content_setting_backed_boolean.h",
+    "content_setting_backed_boolean.mm",
+    "observable_boolean.h",
+    "pref_backed_boolean.h",
+    "pref_backed_boolean.mm",
+    "resized_avatar_cache.h",
+    "resized_avatar_cache.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/content_settings/core/browser",
+    "//components/content_settings/core/common",
+    "//components/prefs",
+    "//ios/chrome/browser/ui",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/signin",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "fake_observable_boolean.h",
+    "fake_observable_boolean.mm",
+  ]
+  deps = [
+    ":utils",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "content_setting_backed_boolean_unittest.mm",
+    "pref_backed_boolean_unittest.mm",
+  ]
+  deps = [
+    ":test_support",
+    ":utils",
+    "//base",
+    "//components/content_settings/core/browser",
+    "//components/content_settings/core/common",
+    "//components/prefs",
+    "//components/prefs:test_support",
+    "//components/sync_preferences:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/content_settings",
+    "//ios/web:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/ios/chrome/browser/ui/side_swipe/BUILD.gn b/ios/chrome/browser/ui/side_swipe/BUILD.gn
index 0b2f874..404b0f6 100644
--- a/ios/chrome/browser/ui/side_swipe/BUILD.gn
+++ b/ios/chrome/browser/ui/side_swipe/BUILD.gn
@@ -15,3 +15,57 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("side_swipe") {
+  sources = [
+    "card_side_swipe_view.h",
+    "card_side_swipe_view.mm",
+    "history_side_swipe_provider.h",
+    "history_side_swipe_provider.mm",
+    "side_swipe_controller.h",
+    "side_swipe_controller.mm",
+    "side_swipe_navigation_view.h",
+    "side_swipe_navigation_view.mm",
+    "side_swipe_util.h",
+    "side_swipe_util.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/reading_list/core",
+    "//components/reading_list/ios",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/side_swipe:resources",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/common",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/infobars",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "side_swipe_controller_unittest.mm",
+  ]
+  deps = [
+    ":side_swipe",
+    "//base",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/chrome/browser/ui/stack_view/BUILD.gn b/ios/chrome/browser/ui/stack_view/BUILD.gn
index 692c3ac..4df6b3c 100644
--- a/ios/chrome/browser/ui/stack_view/BUILD.gn
+++ b/ios/chrome/browser/ui/stack_view/BUILD.gn
@@ -50,3 +50,119 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("stack_view") {
+  sources = [
+    "card_set.h",
+    "card_set.mm",
+    "card_stack_layout_manager.h",
+    "card_stack_layout_manager.mm",
+    "card_stack_pinch_gesture_recognizer.h",
+    "card_stack_pinch_gesture_recognizer.mm",
+    "card_view.h",
+    "card_view.mm",
+    "close_button.h",
+    "close_button.mm",
+    "page_animation_util.h",
+    "page_animation_util.mm",
+    "stack_card.h",
+    "stack_card.mm",
+    "stack_view_controller.h",
+    "stack_view_controller.mm",
+    "stack_view_controller_private.h",
+    "stack_view_toolbar_controller.h",
+    "stack_view_toolbar_controller.mm",
+    "title_label.h",
+    "title_label.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/keyboard",
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/stack_view:resources",
+    "//ios/chrome/browser/ui/tab_switcher",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/common",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [
+    "CoreGraphics.framework",
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "card_set_unittest.mm",
+    "card_stack_layout_manager_unittest.mm",
+    "stack_card_unittest.mm",
+    "stack_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":stack_view",
+    "//base",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test:test_support",
+    "//ios/testing:ocmock_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "stack_view_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/stack_view",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+  ]
+  libs = [ "XCTest.framework" ]
+}
+
+source_set("perf_tests") {
+  testonly = true
+  sources = [
+    "stack_view_controller_perftest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/test:perf_test_support",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/stack_view",
+    "//ios/web",
+    "//net",
+  ]
+  libs = [ "UIKit.framework" ]
+}
diff --git a/ios/chrome/browser/ui/static_content/BUILD.gn b/ios/chrome/browser/ui/static_content/BUILD.gn
new file mode 100644
index 0000000..494c90d
--- /dev/null
+++ b/ios/chrome/browser/ui/static_content/BUILD.gn
@@ -0,0 +1,42 @@
+# 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.
+
+source_set("static_content") {
+  sources = [
+    "static_html_native_content.h",
+    "static_html_native_content.mm",
+    "static_html_view_controller.h",
+    "static_html_view_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "static_html_native_content_unittest.mm",
+    "static_html_view_controller_unittest.mm",
+  ]
+  deps = [
+    ":static_content",
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/ui",
+    "//ios/testing:ocmock_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//ui/base",
+  ]
+}
diff --git a/ios/chrome/browser/ui/sync/BUILD.gn b/ios/chrome/browser/ui/sync/BUILD.gn
new file mode 100644
index 0000000..53aaf3e
--- /dev/null
+++ b/ios/chrome/browser/ui/sync/BUILD.gn
@@ -0,0 +1,61 @@
+# 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/public/provider/chrome/browser/build_config.gni")
+
+source_set("sync") {
+  sources = [
+    "sync_error_infobar_delegate.h",
+    "sync_error_infobar_delegate.mm",
+    "sync_util.h",
+    "sync_util.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/browser_sync",
+    "//components/infobars/core",
+    "//components/strings",
+    "//components/sync",
+    "//google_apis",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui/commands",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "sync_fake_server_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/browser_sync",
+    "//components/strings",
+    "//components/sync",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/bookmarks:bookmarks_utils",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/ui/settings",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/tab/BUILD.gn b/ios/chrome/browser/ui/tab/BUILD.gn
new file mode 100644
index 0000000..396fb44
--- /dev/null
+++ b/ios/chrome/browser/ui/tab/BUILD.gn
@@ -0,0 +1,25 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("tab") {
+  sources = [
+    "tab_container_view_controller.h",
+    "tab_container_view_controller.mm",
+    "tab_coordinator.h",
+    "tab_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/ui:ui_clean_skeleton",
+    "//ios/chrome/browser/ui/animators",
+    "//ios/chrome/browser/ui/presenters",
+    "//ios/chrome/browser/ui/toolbar:toolbar_clean_skeleton",
+    "//ios/chrome/browser/ui/web_contents",
+    "//ios/web",
+  ]
+}
diff --git a/ios/chrome/browser/ui/tab_grid/BUILD.gn b/ios/chrome/browser/ui/tab_grid/BUILD.gn
new file mode 100644
index 0000000..e38eb26e
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_grid/BUILD.gn
@@ -0,0 +1,41 @@
+# 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.
+
+source_set("tab_grid") {
+  sources = [
+    "tab_grid_coordinator.h",
+    "tab_grid_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":tab_grid_ui",
+    "//base",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/ui/settings:settings_clean_skeleton",
+    "//ios/chrome/browser/ui/tab",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+  ]
+}
+
+source_set("tab_grid_ui") {
+  sources = [
+    "tab_grid_tab_cell.h",
+    "tab_grid_tab_cell.mm",
+    "tab_grid_view_controller.h",
+    "tab_grid_view_controller.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui/actions",
+    "//ios/chrome/browser/ui/animators",
+  ]
+}
diff --git a/ios/chrome/browser/ui/tab_switcher/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/BUILD.gn
index dfa0ffef..55c1d92 100644
--- a/ios/chrome/browser/ui/tab_switcher/BUILD.gn
+++ b/ios/chrome/browser/ui/tab_switcher/BUILD.gn
@@ -48,3 +48,154 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("tab_switcher") {
+  sources = [
+    "session_changes.h",
+    "session_changes.mm",
+    "tab_model_snapshot.h",
+    "tab_model_snapshot.mm",
+    "tab_switcher.h",
+    "tab_switcher_button.h",
+    "tab_switcher_button.mm",
+    "tab_switcher_cache.h",
+    "tab_switcher_cache.mm",
+    "tab_switcher_controller.h",
+    "tab_switcher_controller.mm",
+    "tab_switcher_header_cell.h",
+    "tab_switcher_header_cell.mm",
+    "tab_switcher_header_view.h",
+    "tab_switcher_header_view.mm",
+    "tab_switcher_model.h",
+    "tab_switcher_model.mm",
+    "tab_switcher_model_private.h",
+    "tab_switcher_panel_cell.h",
+    "tab_switcher_panel_cell.mm",
+    "tab_switcher_panel_collection_view_layout.h",
+    "tab_switcher_panel_collection_view_layout.mm",
+    "tab_switcher_panel_controller.h",
+    "tab_switcher_panel_controller.mm",
+    "tab_switcher_panel_overlay_view.h",
+    "tab_switcher_panel_overlay_view.mm",
+    "tab_switcher_panel_view.h",
+    "tab_switcher_panel_view.mm",
+    "tab_switcher_session_cell_data.h",
+    "tab_switcher_session_cell_data.mm",
+    "tab_switcher_tab_strip_placeholder_view.h",
+    "tab_switcher_tab_strip_placeholder_view.mm",
+    "tab_switcher_transition_context.h",
+    "tab_switcher_transition_context.mm",
+    "tab_switcher_view.h",
+    "tab_switcher_view.mm",
+  ]
+  deps = [
+    ":utils",
+    "//base",
+    "//components/browser_sync",
+    "//components/sessions",
+    "//components/signin/core/browser",
+    "//components/sync",
+    "//components/sync_sessions",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:sessions_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/keyboard",
+    "//ios/chrome/browser/ui/material_components",
+    "//ios/chrome/browser/ui/ntp/recent_tabs/views",
+    "//ios/chrome/browser/ui/sync",
+    "//ios/chrome/browser/ui/tab_switcher:resources",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/common:ios_app_bundle_id_prefix_header",
+    "//ios/public/provider/chrome/browser",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/third_party/material_text_accessibility_ios",
+    "//ios/web",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/ntp/recent_tabs",
+  ]
+  allow_circular_includes_from = [ "//ios/chrome/browser/ui/tabs" ]
+  libs = [
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("utils") {
+  sources = [
+    "tab_switcher_utils.h",
+    "tab_switcher_utils.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/browser_sync",
+    "//components/sync",
+    "//components/sync_sessions",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/favicon",
+    "//ios/chrome/browser/sync",
+    "//ui/base",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "tab_model_snapshot_unittest.mm",
+    "tab_switcher_model_unittest.mm",
+    "tab_switcher_utils_unittest.mm",
+  ]
+  deps = [
+    ":tab_switcher",
+    ":utils",
+    "//base",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui/ntp/recent_tabs",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "tab_switcher_controller_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ui/base",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
diff --git a/ios/chrome/browser/ui/tabs/BUILD.gn b/ios/chrome/browser/ui/tabs/BUILD.gn
index 8f2fb48..1f607c1 100644
--- a/ios/chrome/browser/ui/tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/tabs/BUILD.gn
@@ -40,3 +40,75 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("tabs") {
+  sources = [
+    "tab_strip_controller+tab_switcher_animation.h",
+    "tab_strip_controller.h",
+    "tab_strip_controller.mm",
+    "tab_strip_controller_private.h",
+    "tab_strip_view.h",
+    "tab_strip_view.mm",
+    "tab_util.h",
+    "tab_util.mm",
+    "tab_view.h",
+    "tab_view.mm",
+    "target_frame_cache.h",
+    "target_frame_cache.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/tabs:resources",
+    "//ios/chrome/browser/ui/util",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//third_party/google_toolbox_for_mac",
+    "//ui/base",
+    "//ui/gfx",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "tab_strip_controller_unittest.mm",
+  ]
+  deps = [
+    ":tabs",
+    "//base",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/sessions:test_support",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "tab_strip_egtest.mm",
+  ]
+  deps = [
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/toolbar/BUILD.gn b/ios/chrome/browser/ui/toolbar/BUILD.gn
index a612d73..360b1db6 100644
--- a/ios/chrome/browser/ui/toolbar/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar/BUILD.gn
@@ -39,3 +39,187 @@
     "{{bundle_resources_dir}}/{{source_file_part}}",
   ]
 }
+
+source_set("toolbar") {
+  sources = [
+    "new_tab_button.h",
+    "new_tab_button.mm",
+    "toolbar_button_tints.h",
+    "toolbar_button_tints.mm",
+    "toolbar_controller+protected.h",
+    "toolbar_controller.h",
+    "toolbar_controller.mm",
+    "toolbar_controller_private.h",
+    "toolbar_model_delegate_ios.h",
+    "toolbar_model_delegate_ios.mm",
+    "toolbar_model_impl_ios.h",
+    "toolbar_model_impl_ios.mm",
+    "toolbar_model_ios.h",
+    "toolbar_owner.h",
+    "toolbar_tools_menu_button.h",
+    "toolbar_tools_menu_button.mm",
+    "tools_menu_button_observer_bridge.h",
+    "tools_menu_button_observer_bridge.mm",
+    "web_toolbar_controller.h",
+    "web_toolbar_controller.mm",
+  ]
+  deps = [
+    ":resource_macros",
+    "//base",
+    "//base:i18n",
+    "//components/bookmarks/browser",
+    "//components/google/core/browser",
+    "//components/omnibox/browser",
+    "//components/prefs",
+    "//components/reading_list/core",
+    "//components/reading_list/ios",
+    "//components/search_engines",
+    "//components/strings",
+    "//components/toolbar",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/app/theme",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/autocomplete",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/reading_list",
+    "//ios/chrome/browser/search_engines",
+    "//ios/chrome/browser/ssl",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/fancy_ui",
+    "//ios/chrome/browser/ui/history",
+    "//ios/chrome/browser/ui/keyboard",
+    "//ios/chrome/browser/ui/qr_scanner",
+    "//ios/chrome/browser/ui/toolbar:resources",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/browser/ui/util",
+    "//ios/chrome/browser/ui/voice",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/images",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ios/web",
+    "//net",
+    "//ui/base",
+    "//ui/gfx",
+
+    # Fake dependencies to break cycles
+    "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/side_swipe",
+  ]
+  public_deps = [
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+  ]
+  allow_circular_includes_from = [
+    "//ios/chrome/browser/ui/side_swipe",
+    "//ios/chrome/browser/ui/ntp",
+  ]
+  libs = [
+    "CoreLocation.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("resource_macros") {
+  sources = [
+    "toolbar_resource_macros.h",
+  ]
+  deps = [
+    "//ios/chrome/app/theme",
+  ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "test_toolbar_model_ios.h",
+    "test_toolbar_model_ios.mm",
+    "web_toolbar_controller_private.h",
+  ]
+  deps = [
+    ":toolbar",
+    "//base",
+    "//components/toolbar",
+    "//components/toolbar:test_support",
+    "//ios/chrome/browser/tabs",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "toolbar_controller_unittest.mm",
+    "toolbar_model_impl_ios_unittest.mm",
+    "web_toolbar_controller_unittest.mm",
+  ]
+  deps = [
+    ":test_support",
+    ":toolbar",
+    "//base",
+    "//components/bookmarks/browser",
+    "//components/bookmarks/test",
+    "//components/toolbar:test_support",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/test:test_support",
+    "//ios/testing:ocmock_support",
+    "//ios/web:test_support",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "toolbar_egtest.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
+
+# Clean Skeleton Targets
+source_set("toolbar_clean_skeleton") {
+  sources = [
+    "toolbar_coordinator.h",
+    "toolbar_coordinator.mm",
+    "toolbar_view_controller.h",
+    "toolbar_view_controller.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/ui/actions",
+    "//ios/chrome/browser/ui/animators",
+    "//ios/chrome/browser/ui/tools",
+    "//ios/web",
+  ]
+}
diff --git a/ios/chrome/browser/ui/tools/BUILD.gn b/ios/chrome/browser/ui/tools/BUILD.gn
new file mode 100644
index 0000000..a3225331
--- /dev/null
+++ b/ios/chrome/browser/ui/tools/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("tools") {
+  sources = [
+    "tools_coordinator.h",
+    "tools_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    ":tools_ui",
+    "//base",
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/ui/actions",
+    "//ios/chrome/browser/ui/animators",
+    "//ios/chrome/browser/ui/presenters",
+  ]
+}
+
+source_set("tools_ui") {
+  sources = [
+    "menu_view_controller.h",
+    "menu_view_controller.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//base",
+    "//ios/chrome/browser/ui/actions",
+  ]
+}
diff --git a/ios/chrome/browser/ui/tools_menu/BUILD.gn b/ios/chrome/browser/ui/tools_menu/BUILD.gn
new file mode 100644
index 0000000..4e29989
--- /dev/null
+++ b/ios/chrome/browser/ui/tools_menu/BUILD.gn
@@ -0,0 +1,75 @@
+# 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.
+
+source_set("tools_menu") {
+  sources = [
+    "reading_list_menu_view_item.h",
+    "reading_list_menu_view_item.mm",
+    "tools_menu_context.h",
+    "tools_menu_context.mm",
+    "tools_menu_view_controller.h",
+    "tools_menu_view_controller.mm",
+    "tools_menu_view_item.h",
+    "tools_menu_view_item.mm",
+    "tools_popup_controller.h",
+    "tools_popup_controller.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//components/reading_list/core",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/colors",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/popup_menu",
+    "//ios/chrome/browser/ui/reading_list",
+    "//ios/chrome/browser/ui/toolbar:resource_macros",
+    "//ios/chrome/common",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//ui/base",
+  ]
+  libs = [
+    "QuartzCore.framework",
+    "UIKit.framework",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "tools_menu_view_item_unittest.mm",
+  ]
+  deps = [
+    ":tools_menu",
+    "//base",
+    "//testing/gtest",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "tools_popup_menu_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/third_party/earl_grey",
+    "//ios/web:test_support",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/ui/util/BUILD.gn b/ios/chrome/browser/ui/util/BUILD.gn
new file mode 100644
index 0000000..48dbae0
--- /dev/null
+++ b/ios/chrome/browser/ui/util/BUILD.gn
@@ -0,0 +1,59 @@
+# 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.
+
+source_set("util") {
+  sources = [
+    "CRUILabel+AttributeUtils.h",
+    "CRUILabel+AttributeUtils.mm",
+    "core_text_util.h",
+    "core_text_util.mm",
+    "label_link_controller.h",
+    "label_link_controller.mm",
+    "label_observer.h",
+    "label_observer.mm",
+    "manual_text_framer.h",
+    "manual_text_framer.mm",
+    "relaxed_bounds_constraints_hittest.h",
+    "snapshot_util.h",
+    "snapshot_util.mm",
+    "text_frame.h",
+    "text_frame.mm",
+    "text_region_mapper.h",
+    "text_region_mapper.mm",
+    "top_view_controller.h",
+    "top_view_controller.mm",
+    "transparent_link_button.h",
+    "transparent_link_button.mm",
+    "unicode_util.h",
+    "unicode_util.mm",
+  ]
+  deps = [
+    "//base",
+    "//base:i18n",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui",
+    "//net",
+    "//url",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "CRUILabel+AttributeUtils_unittest.mm",
+    "core_text_util_unittest.mm",
+    "label_link_controller_unittest.mm",
+    "label_observer_unittest.mm",
+    "manual_text_framer_unittest.mm",
+    "text_region_mapper_unittest.mm",
+  ]
+  deps = [
+    ":util",
+    "//base",
+    "//ios/third_party/material_components_ios",
+    "//ios/third_party/material_roboto_font_loader_ios",
+    "//testing/gtest",
+    "//url",
+  ]
+}
diff --git a/ios/chrome/browser/ui/web_contents/BUILD.gn b/ios/chrome/browser/ui/web_contents/BUILD.gn
new file mode 100644
index 0000000..dcbe549da
--- /dev/null
+++ b/ios/chrome/browser/ui/web_contents/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("web_contents") {
+  sources = [
+    "web_contents_view_controller.h",
+    "web_contents_view_controller.mm",
+    "web_coordinator.h",
+    "web_coordinator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+
+  deps = [
+    "//ios/chrome/browser:browser_clean_skeleton",
+    "//ios/chrome/browser/web:web_clean_skeleton",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+}
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn
index b1478185..456c5ad 100644
--- a/ios/chrome/browser/ui/webui/BUILD.gn
+++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -54,3 +54,55 @@
     "//url",
   ]
 }
+
+source_set("webui_internal") {
+  sources = [
+    "chrome_web_ui_ios_controller_factory.h",
+    "chrome_web_ui_ios_controller_factory.mm",
+    "omaha_ui.cc",
+    "omaha_ui.h",
+    "signin_internals_ui_ios.cc",
+    "signin_internals_ui_ios.h",
+  ]
+  deps = [
+    "//base",
+    "//components/favicon/core",
+    "//components/favicon_base",
+    "//components/resources",
+    "//components/signin/core/browser",
+    "//ios/chrome/app/resources:ios_resources",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/omaha",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/ui/webui",
+    "//ios/chrome/browser/ui/webui/gcm",
+    "//ios/chrome/browser/ui/webui/net_export",
+    "//ios/chrome/browser/ui/webui/sync_internals",
+    "//ios/web",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "web_ui_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/strings",
+    "//components/version_info",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/web",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [ "XCTest.framework" ]
+}
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index acb5fb5..f825fc6 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -155,3 +155,170 @@
     "resources/print.js",
   ]
 }
+
+source_set("web_internal") {
+  sources = [
+    "auto_reload_bridge.h",
+    "auto_reload_bridge.mm",
+    "auto_reload_controller.h",
+    "auto_reload_controller.mm",
+    "blocked_popup_handler.h",
+    "blocked_popup_handler.mm",
+    "chrome_web_client.h",
+    "chrome_web_client.mm",
+    "error_page_content.h",
+    "error_page_content.mm",
+    "external_app_launcher.h",
+    "external_app_launcher.mm",
+    "passkit_dialog_provider.h",
+    "print_observer.h",
+    "print_observer.mm",
+  ]
+  deps = [
+    "//base",
+    "//components/content_settings/core/browser",
+    "//components/dom_distiller/core",
+    "//components/error_page/common",
+    "//components/infobars/core",
+    "//components/prefs",
+    "//components/resources",
+    "//components/strings",
+    "//components/task_scheduler_util/initialization",
+    "//components/task_scheduler_util/variations",
+    "//components/version_info",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_impl",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/ssl",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/overscroll_actions",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/chrome/browser/web:injected_js",
+    "//ios/chrome/browser/web:resources",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/voice",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ios/web:user_agent",
+    "//net",
+    "//ui/base",
+    "//ui/gfx",
+    "//url",
+  ]
+  libs = [ "UIKit.framework" ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "chrome_web_test.h",
+    "chrome_web_test.mm",
+  ]
+  deps = [
+    "//components/password_manager/core/browser:test_support",
+    "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/web",
+    "//ios/web:test_support",
+  ]
+}
+
+source_set("unit_tests_internal") {
+  testonly = true
+  sources = [
+    "auto_reload_controller_unittest.mm",
+    "chrome_web_client_unittest.mm",
+    "error_page_content_unittest.mm",
+    "external_app_launcher_unittest.mm",
+    "find_in_page_js_unittest.mm",
+    "js_findinpage_manager_unittest.mm",
+  ]
+  deps = [
+    ":test_support",
+    ":web_internal",
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/browser/find_in_page",
+    "//ios/chrome/browser/ui",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//testing/gtest",
+    "//third_party/ocmock",
+    "//url",
+  ]
+}
+
+source_set("eg_tests") {
+  testonly = true
+  sources = [
+    "browsing_egtest.mm",
+    "browsing_prevent_default_egtest.mm",
+    "cache_egtest.mm",
+    "child_window_open_by_dom_egtest.mm",
+    "forms_egtest.mm",
+    "js_print_egtest.mm",
+    "navigation_egtest.mm",
+    "progress_indicator_egtest.mm",
+    "push_and_replace_state_navigation_egtest.mm",
+    "stop_loading_egtest.mm",
+    "visible_url_egtest.mm",
+    "window_open_by_dom_egtest.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/content_settings/core/browser",
+    "//components/content_settings/core/common",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/ui",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/test/app:test_support",
+    "//ios/chrome/test/earl_grey:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/testing/earl_grey:earl_grey_support",
+    "//ios/third_party/earl_grey",
+    "//ios/third_party/material_components_ios",
+    "//ios/web:earl_grey_test_support",
+    "//ios/web:test_support",
+    "//net",
+    "//ui/base",
+    "//url",
+  ]
+  libs = [
+    "UIKit.framework",
+    "XCTest.framework",
+  ]
+}
+
+source_set("perf_tests") {
+  testonly = true
+  sources = [
+    "early_page_script_perftest.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/test/base:perf_test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+  ]
+  libs = [ "WebKit.framework" ]
+}
+
+# Clean Skeleton targets.
+source_set("web_clean_skeleton") {
+  sources = [
+    "web_mediator+internal.h",
+    "web_mediator.h",
+    "web_mediator.mm",
+  ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn
index 127dd9b..4dd78dcb 100644
--- a/ios/chrome/test/BUILD.gn
+++ b/ios/chrome/test/BUILD.gn
@@ -6,9 +6,12 @@
 import("//ios/public/provider/chrome/browser/build_config.gni")
 import("//testing/test.gni")
 
+# All tests needs to be listed in that target to be built as part of
+# "gn_all" target (i.e. by the bots).
 group("all_tests") {
   testonly = true
   deps = [
+    ":ios_chrome_perftests",
     ":ios_chrome_unittests",
   ]
 }
@@ -74,45 +77,105 @@
   ]
 }
 
+test("ios_chrome_perftests") {
+  deps = [
+    # Ensure that all perf tests are run, use fake hooks and pack resources.
+    "//ios/chrome/app:tests_fake_hook",
+    "//ios/chrome/test:run_all_unittests",
+    ios_packed_resources_target,
+
+    # Add perf_tests target here.
+    "//ios/chrome/browser/ui:perf_tests",
+    "//ios/chrome/browser/ui/ntp:perf_tests",
+    "//ios/chrome/browser/ui/stack_view:perf_tests",
+    "//ios/chrome/browser/web:perf_tests",
+  ]
+
+  assert_no_deps = ios_assert_no_deps
+}
+
 test("ios_chrome_unittests") {
   deps = [
-    # Ensure that all unit tests are run and packed resources available.
-    ":run_all_unittests",
+    # Ensure that all unit tests are run, use fake hooks and pack resources.
+    "//ios/chrome/app:tests_fake_hook",
+    "//ios/chrome/test:run_all_unittests",
     ios_packed_resources_target,
 
     # Add unit_tests target here.
     ":unit_tests",
     "//ios/chrome/app:unit_tests",
     "//ios/chrome/app/application_delegate:unit_tests",
+    "//ios/chrome/app/safe_mode:unit_tests",
+    "//ios/chrome/app/spotlight:unit_tests",
     "//ios/chrome/browser:unit_tests",
+    "//ios/chrome/browser/autofill:unit_tests",
     "//ios/chrome/browser/browsing_data:unit_tests",
+    "//ios/chrome/browser/crash_report:unit_tests",
     "//ios/chrome/browser/device_sharing:unit_tests",
     "//ios/chrome/browser/favicon:unit_tests",
     "//ios/chrome/browser/geolocation:unit_tests",
     "//ios/chrome/browser/itunes_links:unit_tests",
     "//ios/chrome/browser/metrics:unit_tests",
+    "//ios/chrome/browser/metrics:unit_tests_internal",
     "//ios/chrome/browser/native_app_launcher:unit_tests",
+    "//ios/chrome/browser/native_app_launcher:unit_tests_internal",
     "//ios/chrome/browser/net: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",
     "//ios/chrome/browser/snapshots:unit_tests",
     "//ios/chrome/browser/ssl:unit_tests",
     "//ios/chrome/browser/suggestions:unit_tests",
     "//ios/chrome/browser/sync:unit_tests",
+    "//ios/chrome/browser/tabs:unit_tests",
     "//ios/chrome/browser/translate:unit_tests",
     "//ios/chrome/browser/u2f:unit_tests",
     "//ios/chrome/browser/ui:unit_tests",
+    "//ios/chrome/browser/ui/activity_services:unit_tests",
     "//ios/chrome/browser/ui/alert_coordinator:unit_tests",
+    "//ios/chrome/browser/ui/authentication:unit_tests",
+    "//ios/chrome/browser/ui/autofill/cells:unit_tests",
+    "//ios/chrome/browser/ui/bookmarks:unit_tests",
+    "//ios/chrome/browser/ui/bookmarks/cells:unit_tests",
+    "//ios/chrome/browser/ui/collection_view:unit_tests",
+    "//ios/chrome/browser/ui/collection_view/cells:unit_tests",
     "//ios/chrome/browser/ui/commands:unit_tests",
     "//ios/chrome/browser/ui/context_menu:unit_tests",
+    "//ios/chrome/browser/ui/contextual_search:unit_tests",
     "//ios/chrome/browser/ui/dialogs:unit_tests",
+    "//ios/chrome/browser/ui/dialogs:unit_tests_internal",
+    "//ios/chrome/browser/ui/downloads:unit_tests",
     "//ios/chrome/browser/ui/elements:unit_tests",
+    "//ios/chrome/browser/ui/fancy_ui:unit_tests",
+    "//ios/chrome/browser/ui/first_run:unit_tests",
+    "//ios/chrome/browser/ui/history:unit_tests",
+    "//ios/chrome/browser/ui/icons:unit_tests",
+    "//ios/chrome/browser/ui/infobars:unit_tests",
     "//ios/chrome/browser/ui/keyboard:unit_tests",
+    "//ios/chrome/browser/ui/main:unit_tests",
+    "//ios/chrome/browser/ui/no_tabs:unit_tests",
+    "//ios/chrome/browser/ui/ntp:unit_tests",
+    "//ios/chrome/browser/ui/omnibox:unit_tests",
+    "//ios/chrome/browser/ui/promos:unit_tests",
+    "//ios/chrome/browser/ui/reading_list:unit_tests",
+    "//ios/chrome/browser/ui/settings:unit_tests",
+    "//ios/chrome/browser/ui/settings/cells:unit_tests",
+    "//ios/chrome/browser/ui/side_swipe:unit_tests",
+    "//ios/chrome/browser/ui/stack_view:unit_tests",
+    "//ios/chrome/browser/ui/static_content:unit_tests",
+    "//ios/chrome/browser/ui/tab_switcher:unit_tests",
+    "//ios/chrome/browser/ui/tabs:unit_tests",
+    "//ios/chrome/browser/ui/toolbar:unit_tests",
+    "//ios/chrome/browser/ui/tools_menu:unit_tests",
+    "//ios/chrome/browser/ui/util:unit_tests",
     "//ios/chrome/browser/ui/voice:unit_tests",
     "//ios/chrome/browser/update_client:unit_tests",
     "//ios/chrome/browser/voice:unit_tests",
     "//ios/chrome/browser/web:unit_tests",
+    "//ios/chrome/browser/web:unit_tests_internal",
     "//ios/chrome/browser/web_resource:unit_tests",
     "//ios/chrome/common:unit_tests",
     "//ios/chrome/test/base:unit_tests",
diff --git a/ios/chrome/test/app/BUILD.gn b/ios/chrome/test/app/BUILD.gn
new file mode 100644
index 0000000..8b6ccd5
--- /dev/null
+++ b/ios/chrome/test/app/BUILD.gn
@@ -0,0 +1,80 @@
+# 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.
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "bookmarks_test_util.h",
+    "bookmarks_test_util.mm",
+    "chrome_test_util.h",
+    "chrome_test_util.mm",
+    "histogram_test_util.h",
+    "histogram_test_util.mm",
+    "history_test_util.h",
+    "history_test_util.mm",
+    "navigation_test_util.h",
+    "navigation_test_util.mm",
+    "settings_test_util.h",
+    "settings_test_util.mm",
+    "signin_test_util.h",
+    "signin_test_util.mm",
+    "stack_view_test_util.h",
+    "stack_view_test_util.mm",
+    "sync_test_util.h",
+    "sync_test_util.mm",
+    "tab_test_util.h",
+    "tab_test_util.mm",
+    "web_view_interaction_test_util.h",
+    "web_view_interaction_test_util.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//breakpad:client",
+    "//components/autofill/core/browser:browser",
+    "//components/bookmarks/browser:browser",
+    "//components/browser_sync",
+    "//components/browsing_data/core",
+    "//components/content_settings/core/browser:browser",
+    "//components/content_settings/core/common:common",
+    "//components/history/core/browser:browser",
+    "//components/keyed_service/core",
+    "//components/metrics",
+    "//components/prefs:prefs",
+    "//components/signin/core/browser:browser",
+    "//components/sync:test_support_fake_server",
+    "//google_apis",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/application_delegate:application_delegate_internal",
+    "//ios/chrome/app/application_delegate:test_support",
+    "//ios/chrome/browser",
+    "//ios/chrome/browser:browser_internal",
+    "//ios/chrome/browser/autofill",
+    "//ios/chrome/browser/bookmarks",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/browsing_data",
+    "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/history",
+    "//ios/chrome/browser/metrics",
+    "//ios/chrome/browser/metrics:metrics_internal",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/tabs",
+    "//ios/chrome/browser/ui:browser_list",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/main",
+    "//ios/chrome/browser/ui/ntp:ntp_internal",
+    "//ios/chrome/browser/ui/stack_view",
+    "//ios/chrome/browser/ui/tabs",
+    "//ios/public/provider/chrome/browser",
+    "//ios/public/provider/chrome/browser/signin:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/web",
+    "//ios/web:test_support",
+    "//net",
+    "//net:test_support",
+    "//url",
+  ]
+}
diff --git a/ios/chrome/test/base/BUILD.gn b/ios/chrome/test/base/BUILD.gn
index 9c7dffc..811cbbb 100644
--- a/ios/chrome/test/base/BUILD.gn
+++ b/ios/chrome/test/base/BUILD.gn
@@ -24,3 +24,17 @@
     "//testing/gtest",
   ]
 }
+
+source_set("perf_test_support") {
+  testonly = true
+  sources = [
+    "perf_test_ios.h",
+    "perf_test_ios.mm",
+  ]
+  deps = [
+    "//base",
+    "//ios/chrome/browser/web:web_internal",
+    "//ios/chrome/test:test_support",
+    "//ios/web:test_support",
+  ]
+}
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn
index f05c0ec..eb83ac00 100644
--- a/ios/chrome/test/earl_grey/BUILD.gn
+++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -2,9 +2,202 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# This empty target is there to help with upstreaming by removing a manual
-# step from the process (updating the //ios:all target). It will be changed
-# to a real target as part of upstreaming.
+import("//ios/chrome/test/earl_grey/chrome_ios_eg_test.gni")
+
 group("all_tests") {
   testonly = true
+  deps = [
+    ":ios_chrome_device_check_egtests",
+    ":ios_chrome_flaky_egtests",
+    ":ios_chrome_integration_egtests",
+    ":ios_chrome_multitasking_egtests",
+    ":ios_chrome_reading_list_egtests",
+    ":ios_chrome_settings_egtests",
+    ":ios_chrome_smoke_egtests",
+    ":ios_chrome_ui_egtests",
+    ":ios_chrome_web_egtests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_integration_egtests") {
+  deps = [
+    "//ios/chrome/browser/autofill:eg_tests",
+    "//ios/chrome/browser/context_menu:eg_tests",
+    "//ios/chrome/browser/device_sharing:eg_tests",
+    "//ios/chrome/browser/metrics:eg_tests",
+    "//ios/chrome/browser/net:eg_tests",
+    "//ios/chrome/browser/translate:eg_tests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_reading_list_egtests") {
+  deps = [
+    ":test_support",
+    "//ios/chrome/browser/ui/reading_list:eg_tests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_settings_egtests") {
+  deps = [
+    "//ios/chrome/browser/ui/settings:eg_tests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_ui_egtests") {
+  deps = [
+    "//ios/chrome/app/safe_mode:eg_tests",
+    "//ios/chrome/browser/ui:eg_tests",
+    "//ios/chrome/browser/ui/activity_services:eg_tests",
+    "//ios/chrome/browser/ui/alert_coordinator:eg_tests",
+    "//ios/chrome/browser/ui/authentication:eg_tests",
+    "//ios/chrome/browser/ui/bookmarks:eg_tests",
+    "//ios/chrome/browser/ui/dialogs:eg_tests",
+    "//ios/chrome/browser/ui/find_bar:eg_tests",
+    "//ios/chrome/browser/ui/first_run:eg_tests",
+    "//ios/chrome/browser/ui/history:eg_tests",
+    "//ios/chrome/browser/ui/infobars:eg_tests",
+    "//ios/chrome/browser/ui/ntp:eg_tests",
+    "//ios/chrome/browser/ui/ntp/recent_tabs:eg_tests",
+    "//ios/chrome/browser/ui/print:eg_tests",
+    "//ios/chrome/browser/ui/qr_scanner:eg_tests",
+    "//ios/chrome/browser/ui/stack_view:eg_tests",
+    "//ios/chrome/browser/ui/sync:eg_tests",
+    "//ios/chrome/browser/ui/tab_switcher:eg_tests",
+    "//ios/chrome/browser/ui/tabs:eg_tests",
+    "//ios/chrome/browser/ui/toolbar:eg_tests",
+    "//ios/chrome/browser/ui/tools_menu:eg_tests",
+    "//ios/chrome/browser/ui/webui:eg_tests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_web_egtests") {
+  deps = [
+    "//ios/chrome/browser/web:eg_tests",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_multitasking_egtests") {
+  sources = [
+    "//ios/chrome/app/multitasking_test_application_delegate.h",
+    "//ios/chrome/app/multitasking_test_application_delegate.mm",
+  ]
+
+  deps = [
+    ":test_support",
+    "//base",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/application_delegate:application_delegate_internal",
+
+    # Depends on all EarlGrey test suites to create multitasking tests suite.
+    ":ios_chrome_integration_egtests_deps_group",
+    ":ios_chrome_settings_egtests_deps_group",
+    ":ios_chrome_ui_egtests_deps_group",
+    ":ios_chrome_web_egtests_deps_group",
+  ]
+
+  eg_main_application_delegate = "MultitaskingTestApplicationDelegate"
+}
+
+chrome_ios_eg_test("ios_chrome_device_check_egtests") {
+  sources = [
+    "device_check_egtest.mm",
+  ]
+  deps = [
+    ":test_support",
+    "//ios/third_party/earl_grey",
+    "//url",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_flaky_egtests") {
+  deps = [
+    ":test_support",
+    "//base",
+
+    # Depends on all EarlGrey test suites to run all the FLAKY_ tests found.
+    # When adding a new test application, please follow the same pattern.
+    ":ios_chrome_integration_egtests_deps_group",
+    ":ios_chrome_settings_egtests_deps_group",
+    ":ios_chrome_ui_egtests_deps_group",
+    ":ios_chrome_web_egtests_deps_group",
+  ]
+}
+
+chrome_ios_eg_test("ios_chrome_smoke_egtests") {
+  sources = [
+    "smoke_egtest.mm",
+  ]
+  deps = [
+    ":test_support",
+    "//ios/chrome/app:app_internal",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui:ui_internal",
+    "//ios/third_party/earl_grey",
+    "//ui/base",
+  ]
+  libs = [ "XCTest.framework" ]
+}
+
+source_set("test_support") {
+  testonly = true
+  sources = [
+    "accessibility_util.h",
+    "accessibility_util.mm",
+    "chrome_actions.h",
+    "chrome_actions.mm",
+    "chrome_assertions.h",
+    "chrome_assertions.mm",
+    "chrome_earl_grey.h",
+    "chrome_earl_grey.mm",
+    "chrome_earl_grey_ui.h",
+    "chrome_earl_grey_ui.mm",
+    "chrome_matchers.h",
+    "chrome_matchers.mm",
+    "chrome_test_case.h",
+    "chrome_test_case.mm",
+    "chrome_util.h",
+    "chrome_util.mm",
+  ]
+
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/strings",
+    "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui:ui",
+    "//ios/chrome/browser/ui/collection_view/cells",
+    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
+    "//ios/chrome/browser/ui/static_content",
+    "//ios/chrome/browser/ui/toolbar",
+    "//ios/chrome/browser/ui/tools_menu",
+    "//ios/chrome/test/app:test_support",
+    "//ios/testing:ios_test_support",
+    "//ios/third_party/material_components_ios",
+    "//ios/web",
+    "//ios/web:earl_grey_test_support",
+    "//ios/web:test_support",
+    "//ui/base",
+    "//url",
+  ]
+
+  public_deps = [
+    "//build/config/ios:xctest",
+    "//ios/third_party/earl_grey",
+  ]
+
+  libs = [
+    "OCHamcrest.framework",
+    "WebKit.framework",
+    "XCTest.framework",
+  ]
+}
+
+source_set("hooks") {
+  testonly = true
+  sources = [
+    "eg_tests_hook.mm",
+  ]
+  deps = [
+    "//ios/chrome/app:tests_hook",
+  ]
 }
diff --git a/ios/chrome/test/earl_grey/chrome_ios_eg_test.gni b/ios/chrome/test/earl_grey/chrome_ios_eg_test.gni
new file mode 100644
index 0000000..c5d7fb9
--- /dev/null
+++ b/ios/chrome/test/earl_grey/chrome_ios_eg_test.gni
@@ -0,0 +1,141 @@
+# 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("//build/mac/tweak_info_plist.gni")
+import("//ios/build/chrome_build.gni")
+import("//ios/public/provider/chrome/browser/build_config.gni")
+import("//ios/third_party/earl_grey/ios_eg_test.gni")
+
+# Template wrapping ios_eg_test, setting default values for EarlGrey test
+# based on //ios/chrome/app:chrome.
+#
+# Arguments:
+#
+#  info_plist:
+#      (optional) string, path to the Info.plist file that will be used for
+#      the bundle.
+#
+#  info_plist_target:
+#      (optional) string, if the info_plist is generated from an action,
+#      rather than a regular source file, specify the target name in lieu
+#      of info_plist. The two arguments are mutually exclusive.
+#
+#  extra_info_plists:
+#      (optional) string array, extra list of plist files that will be merged
+#      and tweaked; ignored if either info_plist or info_plist_target is set.
+#
+#   entitlements_path:
+#       (optional) path to the template to use to generate the application
+#       entitlements by performing variable substitutions, defaults to
+#       //build/config/ios/entitlements.plist.
+#
+#   entitlements_target:
+#       (optional) label of the target generating the application
+#       entitlements (must generate a single file as output); cannot be
+#       defined if entitlements_path is set.
+#
+#   deps
+#        list of labels to depends on.
+#
+# This template defines two targets, one named "${target_name}" is the EarlGrey
+# test application, and the other named "${target_name}_deps_group" is a group
+# target that depends on the template "deps" property (used to implement the
+# test suite running the FLAKY_ tests).
+#
+template("chrome_ios_eg_test") {
+  if (!defined(entitlements_path) && !defined(entitlements_target)) {
+    _target_name = target_name
+    _tweak_entitlements = target_name + "_tweak_entitlements"
+    compile_plist(_tweak_entitlements) {
+      format = "xml1"
+      substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
+      output_name = "$target_gen_dir/$_target_name.entitlements"
+      plist_templates =
+          [ "//ios/chrome/test/earl_grey/resources/Chrome.entitlements" ]
+    }
+  }
+
+  if (!defined(info_plist) && !defined(info_plist_target)) {
+    _tweak_info_plist = target_name + "_tweak_info_plist"
+    tweak_info_plist(_tweak_info_plist) {
+      info_plists = [
+        "//ios/chrome/app/resources/Info.plist",
+        "//ios/chrome/app/resources/EarlGreyAddition+Info.plist",
+      ]
+      if (ios_chrome_info_plist_additions != []) {
+        info_plists += ios_chrome_info_plist_additions
+      }
+      if (defined(invoker.extra_info_plists)) {
+        info_plists += invoker.extra_info_plists
+      }
+      args = [
+        "--breakpad=$breakpad_enabled_as_int",
+        "--branding=$chromium_short_name",
+        "--version-overrides=MINOR=9999",
+      ]
+    }
+  }
+
+  _deps_group_name = target_name + "_deps_group"
+  group(_deps_group_name) {
+    testonly = true
+    public_deps = invoker.deps
+    if (defined(invoker.public_deps)) {
+      public_deps += invoker.public_deps
+    }
+  }
+
+  ios_eg_test(target_name) {
+    forward_variables_from(invoker,
+                           "*",
+                           [
+                             "deps",
+                             "entitlements_path",
+                             "entitlements_target",
+                             "eg_main_application_delegate",
+                             "info_plist",
+                             "info_plist_target",
+                             "public_deps",
+                           ])
+
+    if (!defined(entitlements_path) && !defined(entitlements_target)) {
+      entitlements_target = ":$_tweak_entitlements"
+    }
+
+    if (!defined(info_plist) && !defined(info_plist_target)) {
+      info_plist_target = ":$_tweak_info_plist"
+    }
+
+    _eg_main_application_delegate = "MainApplicationDelegate"
+    if (defined(invoker.eg_main_application_delegate)) {
+      _eg_main_application_delegate = invoker.eg_main_application_delegate
+    }
+
+    deps = [
+      ":$_deps_group_name",
+      "//ios/chrome/app:main",
+      "//ios/chrome/test/earl_grey:hooks",
+      "//ios/testing:http_server_bundle_data",
+    ]
+    if (!defined(bundle_deps)) {
+      bundle_deps = []
+    }
+    bundle_deps += [ "//ios/chrome/app/resources" ]
+
+    if (!defined(extra_substitutions)) {
+      extra_substitutions = []
+    }
+    extra_substitutions += [
+      "CHROMIUM_BUNDLE_ID=gtest.$target_name",
+      "CHROMIUM_HANDOFF_ID=$chromium_handoff_id",
+      "CHROMIUM_SHORT_NAME=$target_name",
+      "CHROMIUM_URL_SCHEME_1=$url_unsecure_scheme",
+      "CHROMIUM_URL_SCHEME_2=$url_secure_scheme",
+      "CHROMIUM_URL_SCHEME_3=$url_x_callback_scheme",
+      "CHROMIUM_URL_SCHEME_4=$url_channel_scheme",
+      "EG_MAIN_APPLICATION_DELEGATE=$_eg_main_application_delegate",
+      "SSOAUTH_URL_SCHEME=$url_ssoauth_scheme",
+    ]
+  }
+}
diff --git a/ios/chrome/test/ocmock/BUILD.gn b/ios/chrome/test/ocmock/BUILD.gn
new file mode 100644
index 0000000..a023247
--- /dev/null
+++ b/ios/chrome/test/ocmock/BUILD.gn
@@ -0,0 +1,21 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("ocmock") {
+  testonly = true
+  sources = [
+    "OCMockObject+BreakpadControllerTesting.h",
+    "OCMockObject+BreakpadControllerTesting.mm",
+    "OCMockObject+CrOCMockAdditions.h",
+    "OCMockObject+CrOCMockAdditions.mm",
+    "scoped_mock_object.h",
+    "scoped_verifying_mock_object.h",
+  ]
+  deps = [
+    "//base",
+    "//breakpad:client",
+    "//testing/gtest",
+    "//third_party/ocmock",
+  ]
+}
diff --git a/ios/public/provider/chrome/browser/build_config.gni b/ios/public/provider/chrome/browser/build_config.gni
index aaf2ee9..676dd82 100644
--- a/ios/public/provider/chrome/browser/build_config.gni
+++ b/ios/public/provider/chrome/browser/build_config.gni
@@ -20,5 +20,5 @@
 
   # Label of the target providing implementation for ChromeBrowserProvider.
   # Overridden when using the Google-internal repository to build Chrome on iOS.
-  ios_provider_target = "//ios/chrome/browser/providers:provider_factory"
+  ios_provider_target = "//ios/chrome/browser:downstream_provider_factory"
 }