diff --git a/.gitignore b/.gitignore
index 597b6a7..ef1d2f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,6 +61,7 @@
 /android_emulator_sdk
 /ash/ash_unittests_run.xml
 /base/base_unittests_run.xml
+/breakpad/src/
 # See build/.gitignore for entries covering src/build.
 /buildtools
 # The Chrome OS build creates a /c symlink due to http://crbug.com/54866.
diff --git a/.gn b/.gn
index 7a7160d..c4833e2 100644
--- a/.gn
+++ b/.gn
@@ -64,6 +64,7 @@
   "//ash/*",
   "//base/*",
   "//blink/*",
+  "//breakpad/*",
   "//build/*",
   "//cc/*",
 
@@ -134,7 +135,6 @@
   "//testing/*",
 
   #"//third_party/*",  # May not ever want this.
-  "//third_party/breakpad/*",
   "//third_party/brotli/*",
   "//third_party/hunspell/*",
   "//third_party/leveldatabase/*",
diff --git a/BUILD.gn b/BUILD.gn
index edbdca4..b75af2f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -364,10 +364,10 @@
 
   if (is_linux || is_android) {
     deps += [
-      "//third_party/breakpad:breakpad_unittests",
-      "//third_party/breakpad:core-2-minidump",
-      "//third_party/breakpad:generate_test_dump",
-      "//third_party/breakpad:minidump-2-core",
+      "//breakpad:breakpad_unittests",
+      "//breakpad:core-2-minidump",
+      "//breakpad:generate_test_dump",
+      "//breakpad:minidump-2-core",
     ]
   }
 
@@ -508,16 +508,16 @@
 
   if (is_android || (is_linux && !is_chromeos)) {
     deps += [
+      "//breakpad:dump_syms($host_toolchain)",
+      "//breakpad:microdump_stackwalk($host_toolchain)",
+      "//breakpad:minidump_dump($host_toolchain)",
+      "//breakpad:minidump_stackwalk($host_toolchain)",
       "//components/network_hints/browser",
       "//content/public/app:browser",
       "//content/public/app:child",
       "//mojo/edk/test:mojo_public_system_perftests",
       "//services/service_manager/public/cpp",
       "//testing/gmock:gmock_main",
-      "//third_party/breakpad:dump_syms($host_toolchain)",
-      "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
-      "//third_party/breakpad:minidump_dump($host_toolchain)",
-      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
     ]
 
     if (!is_android) {
@@ -547,9 +547,9 @@
 
   if (is_mac) {
     deps += [
+      "//breakpad:crash_inspector",
+      "//breakpad:dump_syms",
       "//third_party/apple_sample_code",
-      "//third_party/breakpad:crash_inspector",
-      "//third_party/breakpad:dump_syms",
       "//third_party/molokocacao",
     ]
     deps -= [
@@ -585,7 +585,7 @@
           [ "//chrome/installer/mini_installer:next_version_mini_installer" ]
     }
   } else if (!is_android && !is_ios && !is_fuchsia) {
-    deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+    deps += [ "//breakpad:symupload($host_toolchain)" ]
   }
 
   if (is_chromecast) {
@@ -813,13 +813,13 @@
   group("chromiumos_preflight") {
     testonly = true
     deps = [
+      "//breakpad:minidump_stackwalk($host_toolchain)",
       "//chrome",
       "//chrome/test/chromedriver",
       "//media:media_unittests",
       "//ppapi/examples/video_decode",
       "//sandbox/linux:chrome_sandbox",
       "//sandbox/linux:sandbox_linux_unittests",
-      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
 
       # Blocked on https://github.com/catapult-project/catapult/issues/2297
       #"//third_party/catapult/telemetry:bitmaptools",
@@ -913,12 +913,12 @@
 
     if (is_android) {
       data_deps += [
-        "//third_party/breakpad:breakpad_unittests",
-        "//third_party/breakpad:dump_syms",
-        "//third_party/breakpad:microdump_stackwalk",
-        "//third_party/breakpad:minidump_dump",
-        "//third_party/breakpad:minidump_stackwalk",
-        "//third_party/breakpad:symupload",
+        "//breakpad:breakpad_unittests",
+        "//breakpad:dump_syms",
+        "//breakpad:microdump_stackwalk",
+        "//breakpad:minidump_dump",
+        "//breakpad:minidump_stackwalk",
+        "//breakpad:symupload",
         "//tools/android/forwarder2",
       ]
     }
@@ -928,16 +928,15 @@
     }
 
     if (!is_win && !is_android) {
-      data_deps +=
-          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+      data_deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
     }
 
     if (is_mac) {
-      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+      data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
     }
 
     if (is_linux) {
-      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+      data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
     }
 
     data = [
@@ -1055,8 +1054,7 @@
         "//chrome/test:angle_perftests",
       ]
     } else {
-      data_deps +=
-          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+      data_deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
     }
   }
 }
diff --git a/DEPS b/DEPS
index 4dda9f72..f5f0741 100644
--- a/DEPS
+++ b/DEPS
@@ -28,6 +28,10 @@
 
 
 vars = {
+  # By default, do not check out src-internal. This can be overridden e.g. with
+  # custom_vars.
+  'checkout_src_internal': 'False',
+
   'chromium_git': 'https://chromium.googlesource.com',
   'swiftshader_git': 'https://swiftshader.googlesource.com',
   'pdfium_git': 'https://pdfium.googlesource.com',
@@ -45,7 +49,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '8b35cb30de6b2ed5e57ff35064870b60a18960ba',
+  'v8_revision': '45a0ce950715c19d967a91464589ca334d95164d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -117,6 +121,7 @@
 allowed_hosts = [
   'android.googlesource.com',
   'boringssl.googlesource.com',
+  'chrome-internal.googlesource.com',
   'chromium.googlesource.com',
   'pdfium.googlesource.com',
   'skia.googlesource.com',
@@ -125,8 +130,13 @@
 ]
 
 deps = {
-  'src/third_party/breakpad/breakpad':
-    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '1c6d1613966eab5d77531e85f3b60c40124b43f0',
+  'src-internal': {
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a10bd7dbe86ec3230cf7b42bb3a5b247ac778082',
+    'condition': 'checkout_src_internal',
+  },
+
+  'src/breakpad/src':
+    Var('chromium_git') + '/breakpad/breakpad/src.git' + '@' + '6b59fc07474c9338e7727c52a6d8a92010a105ad',
 
   'src/buildtools':
     Var('chromium_git') + '/chromium/buildtools.git' + '@' +  Var('buildtools_revision'),
@@ -450,7 +460,7 @@
 
     # Minizip library. Used on Chrome OS.
     'src/third_party/minizip/src':
-      Var('chromium_git') + '/external/github.com/nmoinvaz/minizip' + '@' + 'dc3ad01e3d5928e9105f770b7e896a8e9fe0d3b4',
+      Var('chromium_git') + '/external/github.com/nmoinvaz/minizip' + '@' + 'e07e141475220196b55294c8172b274cc32d642d',
 
     # Android Explicit Synchronization.
     'src/third_party/libsync/src':
@@ -532,11 +542,11 @@
 
 # checkdeps.py shouldn't check include paths for files in these dirs:
 skip_child_includes = [
+  'breakpad',
   'native_client_sdk',
   'out',
   'skia',
   'testing',
-  'third_party/breakpad/breakpad',
   'v8',
   'win8',
 ]
@@ -1246,4 +1256,6 @@
   'src/third_party/android_tools',
   # ANGLE manages DEPS that it also owns the build files for, such as dEQP.
   ("src/third_party/angle", "DEPS.chromium"),
+  # src-internal has its own DEPS file to pull additional internal repos
+  'src-internal',
 ]
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 8f81373a..be5db1d8 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -10,13 +10,13 @@
 
 
 _EXCLUDED_PATHS = (
+    r"^breakpad[\\\/].*",
     r"^native_client_sdk[\\\/]src[\\\/]build_tools[\\\/]make_rules.py",
     r"^native_client_sdk[\\\/]src[\\\/]build_tools[\\\/]make_simple.py",
     r"^native_client_sdk[\\\/]src[\\\/]tools[\\\/].*.mk",
     r"^net[\\\/]tools[\\\/]spdyshark[\\\/].*",
     r"^skia[\\\/].*",
     r"^third_party[\\\/](WebKit|blink)[\\\/].*",
-    r"^third_party[\\\/]breakpad[\\\/].*",
     r"^v8[\\\/].*",
     r".*MakeFile$",
     r".+_autogen\.h$",
@@ -429,17 +429,6 @@
       ),
     ),
     (
-      'leveldb::NewMemEnv',
-      (
-        'Instead of leveldb::NewMemEnv() use leveldb_chrome::NewMemEnv() from',
-        'third_party/leveldatabase/leveldb_chrome.h.',
-      ),
-      True,
-      (
-        r'^third_party/leveldatabase/.*\.(cc|h)$',
-      ),
-    ),
-    (
       'MessageLoop::QuitWhenIdleClosure',
       (
         'MessageLoop::QuitWhenIdleClosure is deprecated. Please migrate to',
diff --git a/base/debug/stack_trace_win.cc b/base/debug/stack_trace_win.cc
index ea270fc..1d7c2b3 100644
--- a/base/debug/stack_trace_win.cc
+++ b/base/debug/stack_trace_win.cc
@@ -106,7 +106,7 @@
 // we are using the Sym* functions.  This is because breakpad does now
 // share a lock with this function.  See this related bug:
 //
-//   https://crbug.com/google-breakpad/311
+//   http://code.google.com/p/google-breakpad/issues/detail?id=311
 //
 // This is a very unlikely edge case, and the current solution is to
 // just ignore it.
diff --git a/base/process/launch_mac.cc b/base/process/launch_mac.cc
index dfa9257a..b8ff49c 100644
--- a/base/process/launch_mac.cc
+++ b/base/process/launch_mac.cc
@@ -76,7 +76,7 @@
 void RestoreDefaultExceptionHandler() {
   // This function is tailored to remove the Breakpad exception handler.
   // exception_mask matches s_exception_mask in
-  // third_party/breakpad/breakpad/src/client/mac/handler/exception_handler.cc
+  // breakpad/src/client/mac/handler/exception_handler.cc
   const exception_mask_t exception_mask = EXC_MASK_BAD_ACCESS |
                                           EXC_MASK_BAD_INSTRUCTION |
                                           EXC_MASK_ARITHMETIC |
diff --git a/breakpad/BUILD.gn b/breakpad/BUILD.gn
new file mode 100644
index 0000000..fb2aeeaa
--- /dev/null
+++ b/breakpad/BUILD.gn
@@ -0,0 +1,993 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/symlink.gni")
+import("//testing/libfuzzer/fuzzer_test.gni")
+import("//testing/test.gni")
+
+if (is_win) {
+  import("//build/config/win/visual_studio_version.gni")
+}
+
+config("tools_config") {
+  include_dirs = [
+    "src",
+    "src/third_party",
+  ]
+  if (is_android) {
+    defines = [ "__ANDROID__" ]
+  }
+  if (is_clang) {
+    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
+  }
+}
+
+config("internal_config") {
+  include_dirs = [ "src" ]
+  defines = []
+  if (is_debug) {
+    # This is needed for GTMLogger to work correctly.
+    defines += [ "DEBUG" ]
+  }
+  if (is_android) {
+    defines += [ "__ANDROID__" ]
+  }
+}
+
+config("client_config") {
+  include_dirs = [ "src" ]
+  if (is_android) {
+    include_dirs += [ "src/common/android/include" ]
+  }
+  if (is_chromeos) {
+    defines = [ "__CHROMEOS__" ]
+  }
+}
+
+config("handler_config") {
+  include_dirs = [ "src" ]
+}
+
+config("sender_config") {
+  include_dirs = [ "src" ]
+}
+
+config("breakpad_unittest_config") {
+  # One of the breakpad unit tests test that we can detect the proper build-id.
+  # We must override the build-id for this one target.
+  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
+}
+
+# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
+# that do not build on Windows.
+if (!is_win) {
+  if (current_toolchain == host_toolchain) {
+    # Contains the code shared by both {micro,mini}dump_stackwalk.
+    static_library("stackwalk_common") {
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources = [
+        "src/processor/basic_code_module.h",
+        "src/processor/basic_code_modules.cc",
+        "src/processor/basic_code_modules.h",
+        "src/processor/basic_source_line_resolver.cc",
+        "src/processor/call_stack.cc",
+        "src/processor/cfi_frame_info.cc",
+        "src/processor/cfi_frame_info.h",
+        "src/processor/disassembler_x86.cc",
+        "src/processor/disassembler_x86.h",
+        "src/processor/dump_context.cc",
+        "src/processor/dump_object.cc",
+        "src/processor/logging.cc",
+        "src/processor/logging.h",
+        "src/processor/pathname_stripper.cc",
+        "src/processor/pathname_stripper.h",
+        "src/processor/proc_maps_linux.cc",
+        "src/processor/process_state.cc",
+        "src/processor/simple_symbol_supplier.cc",
+        "src/processor/simple_symbol_supplier.h",
+        "src/processor/source_line_resolver_base.cc",
+        "src/processor/stack_frame_cpu.cc",
+        "src/processor/stack_frame_symbolizer.cc",
+        "src/processor/stackwalk_common.cc",
+        "src/processor/stackwalker.cc",
+        "src/processor/stackwalker_amd64.cc",
+        "src/processor/stackwalker_amd64.h",
+        "src/processor/stackwalker_arm.cc",
+        "src/processor/stackwalker_arm.h",
+        "src/processor/stackwalker_arm64.cc",
+        "src/processor/stackwalker_arm64.h",
+        "src/processor/stackwalker_mips.cc",
+        "src/processor/stackwalker_mips.h",
+        "src/processor/stackwalker_ppc.cc",
+        "src/processor/stackwalker_ppc.h",
+        "src/processor/stackwalker_ppc64.cc",
+        "src/processor/stackwalker_ppc64.h",
+        "src/processor/stackwalker_sparc.cc",
+        "src/processor/stackwalker_sparc.h",
+        "src/processor/stackwalker_x86.cc",
+        "src/processor/stackwalker_x86.h",
+        "src/processor/tokenize.cc",
+        "src/processor/tokenize.h",
+
+        # libdisasm
+        "src/third_party/libdisasm/ia32_implicit.c",
+        "src/third_party/libdisasm/ia32_implicit.h",
+        "src/third_party/libdisasm/ia32_insn.c",
+        "src/third_party/libdisasm/ia32_insn.h",
+        "src/third_party/libdisasm/ia32_invariant.c",
+        "src/third_party/libdisasm/ia32_invariant.h",
+        "src/third_party/libdisasm/ia32_modrm.c",
+        "src/third_party/libdisasm/ia32_modrm.h",
+        "src/third_party/libdisasm/ia32_opcode_tables.c",
+        "src/third_party/libdisasm/ia32_opcode_tables.h",
+        "src/third_party/libdisasm/ia32_operand.c",
+        "src/third_party/libdisasm/ia32_operand.h",
+        "src/third_party/libdisasm/ia32_reg.c",
+        "src/third_party/libdisasm/ia32_reg.h",
+        "src/third_party/libdisasm/ia32_settings.c",
+        "src/third_party/libdisasm/ia32_settings.h",
+        "src/third_party/libdisasm/libdis.h",
+        "src/third_party/libdisasm/qword.h",
+        "src/third_party/libdisasm/x86_disasm.c",
+        "src/third_party/libdisasm/x86_format.c",
+        "src/third_party/libdisasm/x86_imm.c",
+        "src/third_party/libdisasm/x86_imm.h",
+        "src/third_party/libdisasm/x86_insn.c",
+        "src/third_party/libdisasm/x86_misc.c",
+        "src/third_party/libdisasm/x86_operand_list.c",
+        "src/third_party/libdisasm/x86_operand_list.h",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    fuzzer_test("minidump_fuzzer") {
+      sources = [
+        "minidump_fuzzer.cc",
+        "src/processor/exploitability.cc",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_processor.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//base",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+      include_dirs = [ "src" ]
+      dict = "minidump_fuzzer.dict"
+
+      libfuzzer_options = [
+        "close_fd_mask=3",
+        "max_len=128000",
+      ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "src/processor/exploitability_linux.cc",
+        "src/processor/exploitability_linux.h",
+        "src/processor/exploitability_win.cc",
+        "src/processor/exploitability_win.h",
+        "src/processor/symbolic_constants_win.cc",
+        "src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("microdump_stackwalk") {
+      sources = [
+        "src/processor/microdump.cc",
+        "src/processor/microdump_processor.cc",
+        "src/processor/microdump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    executable("minidump_stackwalk") {
+      sources = [
+        "src/processor/exploitability.cc",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_processor.cc",
+        "src/processor/minidump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "src/processor/exploitability_linux.cc",
+        "src/processor/exploitability_linux.h",
+        "src/processor/exploitability_win.cc",
+        "src/processor/exploitability_win.h",
+        "src/processor/symbolic_constants_win.cc",
+        "src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("minidump_dump") {
+      set_sources_assignment_filter([])
+      sources = [
+        "src/processor/basic_code_module.h",
+        "src/processor/basic_code_modules.cc",
+        "src/processor/basic_code_modules.h",
+        "src/processor/dump_context.cc",
+        "src/processor/dump_object.cc",
+        "src/processor/logging.cc",
+        "src/processor/logging.h",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_dump.cc",
+        "src/processor/pathname_stripper.cc",
+        "src/processor/pathname_stripper.h",
+        "src/processor/proc_maps_linux.cc",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("microdump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_dump") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+# Mac --------------------------------------------------------------------------
+
+if (is_mac) {
+  if (current_toolchain == host_toolchain) {
+    # TODO(GYP) This should be only 64-bit on Mac. From .gypi:
+    # Like ld, dump_syms needs to operate on enough data that it may
+    # actually need to be able to address more than 4GB. Use x86_64.
+    # Don't worry! An x86_64 dump_syms is perfectly able to dump
+    # 32-bit files.
+    executable("dump_syms") {
+      sources = [
+        "src/common/dwarf/bytereader.cc",
+        "src/common/dwarf/dwarf2diehandler.cc",
+        "src/common/dwarf/dwarf2reader.cc",
+        "src/common/dwarf/elf_reader.cc",
+        "src/common/dwarf/elf_reader.h",
+        "src/common/dwarf_cfi_to_module.cc",
+        "src/common/dwarf_cu_to_module.cc",
+        "src/common/dwarf_line_to_module.cc",
+        "src/common/language.cc",
+        "src/common/mac/arch_utilities.cc",
+        "src/common/mac/arch_utilities.h",
+        "src/common/mac/dump_syms.cc",
+        "src/common/mac/file_id.cc",
+        "src/common/mac/macho_id.cc",
+        "src/common/mac/macho_reader.cc",
+        "src/common/mac/macho_utilities.cc",
+        "src/common/mac/macho_walker.cc",
+        "src/common/md5.cc",
+        "src/common/module.cc",
+        "src/common/stabs_reader.cc",
+        "src/common/stabs_to_module.cc",
+        "src/tools/mac/dump_syms/dump_syms_tool.cc",
+      ]
+
+      # For src/common/stabs_reader.h.
+      defines = [ "HAVE_MACH_O_NLIST_H" ]
+      include_dirs = [ "src/common/mac" ]
+
+      # The DWARF utilities require -funsigned-char.
+      cflags = [ "-funsigned-char" ]
+
+      configs += [ ":internal_config" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      libs = [ "Foundation.framework" ]
+
+      if (!is_debug) {
+        # dump_syms crashes when built at -O1, -O2, and -O3.  It does
+        # not crash at -Os.  To play it safe, dump_syms is always built
+        # at -O0 until this can be sorted out.
+        # http://code.google.com/p/google-breakpad/issues/detail?id=329
+        configs -= [ "//build/config/compiler:default_optimization" ]
+        cflags += [ "-O0" ]
+      }
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    executable("symupload") {
+      sources = [
+        "src/common/mac/HTTPMultipartUpload.m",
+        "src/tools/mac/symupload/symupload.m",
+      ]
+
+      include_dirs = [ "src/common/mac" ]
+
+      libs = [ "Foundation.framework" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    binary_symlink("dump_syms") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+if (is_ios) {
+  binary_symlink("dump_syms") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+  binary_symlink("symupload") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+}
+
+if (is_mac) {
+  static_library("utilities") {
+    sources = [
+      "src/client/mac/crash_generation/ConfigFile.mm",
+      "src/client/mac/handler/breakpad_nlist_64.cc",
+      "src/client/mac/handler/dynamic_images.cc",
+      "src/client/mac/handler/minidump_generator.cc",
+      "src/client/minidump_file_writer.cc",
+      "src/common/convert_UTF.c",
+      "src/common/mac/MachIPC.mm",
+      "src/common/mac/arch_utilities.cc",
+      "src/common/mac/bootstrap_compat.cc",
+      "src/common/mac/file_id.cc",
+      "src/common/mac/launch_reporter.cc",
+      "src/common/mac/macho_id.cc",
+      "src/common/mac/macho_utilities.cc",
+      "src/common/mac/macho_walker.cc",
+      "src/common/mac/string_utilities.cc",
+      "src/common/md5.cc",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/string_conversion.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  executable("crash_inspector") {
+    sources = [
+      "src/client/mac/crash_generation/Inspector.mm",
+      "src/client/mac/crash_generation/InspectorMain.mm",
+    ]
+
+    # TODO(GYP): 'mac_real_dsym': 1,
+
+    include_dirs = [
+      "src/client/apple/Framework",
+      "src/common/mac",
+      "src",
+    ]
+    libs = [
+      "CoreServices.framework",
+      "Foundation.framework",
+    ]
+
+    deps = [
+      ":utilities",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  # TODO(GYP) this target has some mac_bundle_resources stuff.
+  # executable("crash_report_sender") {
+  # }
+  group("crash_report_sender") {
+  }
+
+  config("breakpad_config") {
+    include_dirs = [ "src/client/apple/Framework" ]
+  }
+
+  static_library("breakpad") {
+    sources = [
+      "src/client/mac/Framework/Breakpad.mm",
+      "src/client/mac/Framework/OnDemandServer.mm",
+      "src/client/mac/crash_generation/crash_generation_client.cc",
+      "src/client/mac/crash_generation/crash_generation_client.h",
+      "src/client/mac/handler/exception_handler.cc",
+      "src/client/mac/handler/protected_memory_allocator.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+    public_configs = [ ":breakpad_config" ]
+
+    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
+    include_dirs = [ "src/client/apple/Framework" ]
+
+    deps = [
+      ":crash_inspector",
+      ":crash_report_sender",
+      ":utilities",
+    ]
+  }
+
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+}
+
+if (is_linux || is_android) {
+  if (current_toolchain == host_toolchain) {
+    executable("symupload") {
+      sources = [
+        "src/common/linux/http_upload.cc",
+        "src/common/linux/http_upload.h",
+        "src/common/linux/symbol_upload.cc",
+        "src/common/linux/symbol_upload.h",
+        "src/tools/linux/symupload/sym_upload.cc",
+      ]
+
+      include_dirs = [
+        "src",
+        "src/third_party",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      libs = [ "dl" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    # dump_syms is a host tool, so only compile it for the host system.
+    executable("dump_syms") {
+      sources = [
+        "src/common/dwarf/bytereader.cc",
+        "src/common/dwarf/dwarf2diehandler.cc",
+        "src/common/dwarf/dwarf2reader.cc",
+        "src/common/dwarf/elf_reader.cc",
+        "src/common/dwarf/elf_reader.h",
+        "src/common/dwarf_cfi_to_module.cc",
+        "src/common/dwarf_cfi_to_module.h",
+        "src/common/dwarf_cu_to_module.cc",
+        "src/common/dwarf_cu_to_module.h",
+        "src/common/dwarf_line_to_module.cc",
+        "src/common/dwarf_line_to_module.h",
+        "src/common/language.cc",
+        "src/common/language.h",
+        "src/common/linux/crc32.cc",
+        "src/common/linux/crc32.h",
+        "src/common/linux/dump_symbols.cc",
+        "src/common/linux/dump_symbols.h",
+        "src/common/linux/elf_symbols_to_module.cc",
+        "src/common/linux/elf_symbols_to_module.h",
+        "src/common/linux/elfutils.cc",
+        "src/common/linux/elfutils.h",
+        "src/common/linux/file_id.cc",
+        "src/common/linux/file_id.h",
+        "src/common/linux/guid_creator.h",
+        "src/common/linux/linux_libc_support.cc",
+        "src/common/linux/linux_libc_support.h",
+        "src/common/linux/memory_mapped_file.cc",
+        "src/common/linux/memory_mapped_file.h",
+        "src/common/module.cc",
+        "src/common/module.h",
+        "src/common/stabs_reader.cc",
+        "src/common/stabs_reader.h",
+        "src/common/stabs_to_module.cc",
+        "src/common/stabs_to_module.h",
+        "src/tools/linux/dump_syms/dump_syms.cc",
+      ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
+      # don't support RTTI, we enable it for this single target. Since
+      # dump_syms doesn't share any object files with anything else,
+      # this doesn't end up polluting Chrome itself.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      # Breakpad rev 583 introduced this flag.
+      # Using this define, stabs_reader.h will include a.out.h to
+      # build on Linux.
+      defines = [ "HAVE_A_OUT_H" ]
+
+      include_dirs = [ "src" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("dump_syms") {
+      binary_label = ":dump_syms($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":symupload($host_toolchain)"
+    }
+  }
+
+  static_library("client") {
+    # Want all these sources for both Linux and Android.
+    set_sources_assignment_filter([])
+    sources = [
+      "src/client/linux/crash_generation/crash_generation_client.cc",
+      "src/client/linux/crash_generation/crash_generation_client.h",
+      "src/client/linux/dump_writer_common/mapping_info.h",
+      "src/client/linux/dump_writer_common/thread_info.cc",
+      "src/client/linux/dump_writer_common/thread_info.h",
+      "src/client/linux/dump_writer_common/ucontext_reader.cc",
+      "src/client/linux/dump_writer_common/ucontext_reader.h",
+      "src/client/linux/handler/exception_handler.cc",
+      "src/client/linux/handler/exception_handler.h",
+      "src/client/linux/handler/minidump_descriptor.cc",
+      "src/client/linux/handler/minidump_descriptor.h",
+      "src/client/linux/log/log.cc",
+      "src/client/linux/log/log.h",
+      "src/client/linux/microdump_writer/microdump_writer.cc",
+      "src/client/linux/microdump_writer/microdump_writer.h",
+      "src/client/linux/minidump_writer/cpu_set.h",
+      "src/client/linux/minidump_writer/directory_reader.h",
+      "src/client/linux/minidump_writer/line_reader.h",
+      "src/client/linux/minidump_writer/linux_core_dumper.cc",
+      "src/client/linux/minidump_writer/linux_core_dumper.h",
+      "src/client/linux/minidump_writer/linux_dumper.cc",
+      "src/client/linux/minidump_writer/linux_dumper.h",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper.h",
+      "src/client/linux/minidump_writer/minidump_writer.cc",
+      "src/client/linux/minidump_writer/minidump_writer.h",
+      "src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
+      "src/client/minidump_file_writer-inl.h",
+      "src/client/minidump_file_writer.cc",
+      "src/client/minidump_file_writer.h",
+      "src/common/convert_UTF.c",
+      "src/common/convert_UTF.h",
+      "src/common/linux/elf_core_dump.cc",
+      "src/common/linux/elf_core_dump.h",
+      "src/common/linux/elfutils.cc",
+      "src/common/linux/elfutils.h",
+      "src/common/linux/file_id.cc",
+      "src/common/linux/file_id.h",
+      "src/common/linux/google_crashdump_uploader.cc",
+      "src/common/linux/google_crashdump_uploader.h",
+      "src/common/linux/guid_creator.cc",
+      "src/common/linux/guid_creator.h",
+      "src/common/linux/libcurl_wrapper.cc",
+      "src/common/linux/libcurl_wrapper.h",
+      "src/common/linux/linux_libc_support.cc",
+      "src/common/linux/linux_libc_support.h",
+      "src/common/linux/memory_mapped_file.cc",
+      "src/common/linux/memory_mapped_file.h",
+      "src/common/linux/safe_readlink.cc",
+      "src/common/linux/safe_readlink.h",
+      "src/common/memory.h",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/simple_string_dictionary.h",
+      "src/common/string_conversion.cc",
+      "src/common/string_conversion.h",
+    ]
+
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    public_configs = [ ":client_config" ]
+
+    if (current_cpu == "arm" && is_chromeos) {
+      # Avoid running out of registers in
+      # linux_syscall_support.h:sys_clone()'s inline assembly.
+      cflags = [ "-marm" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    if (is_android) {
+      sources += [ "src/common/android/breakpad_getcontext.S" ]
+    }
+
+    libs = [ "dl" ]
+
+    include_dirs = [
+      ".",
+      "src",
+      "src/client",
+      "src/third_party/linux/include",
+    ]
+  }
+
+  static_library("processor_support") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/common/scoped_ptr.h",
+      "src/processor/basic_code_modules.cc",
+      "src/processor/basic_code_modules.h",
+      "src/processor/dump_context.cc",
+      "src/processor/dump_object.cc",
+      "src/processor/logging.cc",
+      "src/processor/logging.h",
+      "src/processor/minidump.cc",
+      "src/processor/pathname_stripper.cc",
+      "src/processor/pathname_stripper.h",
+      "src/processor/proc_maps_linux.cc",
+    ]
+
+    include_dirs = [
+      "src",
+      "src/client",
+      "src/third_party/linux/include",
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  test("breakpad_unittests") {
+    set_sources_assignment_filter([])
+    sources = [
+      "linux/breakpad_googletest_includes.h",
+      "src/client/linux/handler/exception_handler_unittest.cc",
+      "src/client/linux/minidump_writer/cpu_set_unittest.cc",
+      "src/client/linux/minidump_writer/directory_reader_unittest.cc",
+      "src/client/linux/minidump_writer/line_reader_unittest.cc",
+      "src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
+      "src/client/linux/minidump_writer/minidump_writer_unittest.cc",
+      "src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
+      "src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
+      "src/common/linux/elf_core_dump_unittest.cc",
+      "src/common/linux/file_id_unittest.cc",
+      "src/common/linux/linux_libc_support_unittest.cc",
+      "src/common/linux/synth_elf.cc",
+      "src/common/linux/tests/auto_testfile.h",
+      "src/common/linux/tests/crash_generator.cc",
+      "src/common/linux/tests/crash_generator.h",
+      "src/common/memory_range.h",
+      "src/common/memory_unittest.cc",
+      "src/common/simple_string_dictionary_unittest.cc",
+      "src/common/test_assembler.cc",
+      "src/common/tests/file_utils.cc",
+      "src/common/tests/file_utils.h",
+      "src/tools/linux/md2core/minidump_memory_range.h",
+      "src/tools/linux/md2core/minidump_memory_range_unittest.cc",
+    ]
+
+    deps = [
+      ":client",
+      ":linux_dumper_unittest_helper",
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//testing/gtest:gtest_main",
+    ]
+
+    include_dirs = [
+      "linux",  # Use our copy of breakpad_googletest_includes.h
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    if (is_clang) {
+      # See http://crbug.com/138571#c18
+      cflags = [ "-Wno-unused-value" ]
+    }
+
+    if (is_android) {
+      use_raw_android_executable = true
+      sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ]
+      libs = [ "log" ]
+      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    # Add the breakpad unittest config at the end to override all configs.
+    configs += [ ":breakpad_unittest_config" ]
+  }
+
+  executable("linux_dumper_unittest_helper") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
+    ]
+    deps = [
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    configs += [ ":client_config" ]
+
+    if (is_component_build) {
+      ldflags = [
+        "-Wl,-rpath,",
+        rebase_path(root_build_dir),
+      ]
+    }
+  }
+
+  executable("generate_test_dump") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "linux/generate-test-dump.cc",
+    ]
+
+    # This file has an unused variable warning.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    if (is_android) {
+      libs = [ "log" ]
+    }
+  }
+
+  executable("minidump-2-core") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/tools/linux/md2core/minidump-2-core.cc",
+    ]
+
+    include_dirs = [ "src" ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  executable("core-2-minidump") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/tools/linux/core2md/core2md.cc",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    include_dirs = [ "src" ]
+  }
+}
+
+if (is_win) {
+  executable("dump_syms") {
+    # TODO(scottmg) using this with VS2015 may break the crash server.
+    # https://crbug.com/696671
+    include_dirs = [
+      "$visual_studio_path/DIA SDK/include",
+      "src",
+    ]
+
+    sources = [
+      "src/common/windows/dia_util.cc",
+      "src/common/windows/dia_util.h",
+      "src/common/windows/guid_string.cc",
+      "src/common/windows/guid_string.h",
+      "src/common/windows/omap.cc",
+      "src/common/windows/omap.h",
+      "src/common/windows/pdb_source_line_writer.cc",
+      "src/common/windows/pdb_source_line_writer.h",
+      "src/common/windows/string_utils-inl.h",
+      "src/common/windows/string_utils.cc",
+      "src/tools/windows/dump_syms/dump_syms.cc",
+    ]
+
+    lib_dirs = []
+    if (target_cpu == "x64") {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
+    } else {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
+    }
+
+    libs = [
+      "diaguids.lib",
+      "imagehlp.lib",
+    ]
+    if (is_clang) {
+      # clang complains about microsoft-specific goto extensions. Instead of
+      # rewriting decade-old, goto-ridden code, disable the warning.
+      cflags = [ "-Wno-microsoft-goto" ]
+    }
+  }
+}
+
+if (is_ios) {
+  static_library("client") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/client/ios/Breakpad.h",
+      "src/client/ios/Breakpad.mm",
+      "src/client/ios/BreakpadController.h",
+      "src/client/ios/BreakpadController.mm",
+      "src/client/ios/handler/ios_exception_minidump_generator.h",
+      "src/client/ios/handler/ios_exception_minidump_generator.mm",
+      "src/client/mac/crash_generation/ConfigFile.h",
+      "src/client/mac/crash_generation/ConfigFile.mm",
+      "src/client/mac/handler/breakpad_nlist_64.cc",
+      "src/client/mac/handler/breakpad_nlist_64.h",
+      "src/client/mac/handler/dynamic_images.cc",
+      "src/client/mac/handler/dynamic_images.h",
+      "src/client/mac/handler/exception_handler.cc",
+      "src/client/mac/handler/exception_handler.h",
+      "src/client/mac/handler/minidump_generator.cc",
+      "src/client/mac/handler/minidump_generator.h",
+      "src/client/mac/handler/protected_memory_allocator.cc",
+      "src/client/mac/handler/protected_memory_allocator.h",
+      "src/client/mac/sender/uploader.h",
+      "src/client/mac/sender/uploader.mm",
+      "src/client/minidump_file_writer-inl.h",
+      "src/client/minidump_file_writer.cc",
+      "src/client/minidump_file_writer.h",
+      "src/common/convert_UTF.c",
+      "src/common/convert_UTF.h",
+      "src/common/mac/HTTPMultipartUpload.m",
+      "src/common/mac/file_id.cc",
+      "src/common/mac/file_id.h",
+      "src/common/mac/macho_id.cc",
+      "src/common/mac/macho_id.h",
+      "src/common/mac/macho_utilities.cc",
+      "src/common/mac/macho_utilities.h",
+      "src/common/mac/macho_walker.cc",
+      "src/common/mac/macho_walker.h",
+      "src/common/mac/string_utilities.cc",
+      "src/common/mac/string_utilities.h",
+      "src/common/md5.cc",
+      "src/common/md5.h",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/simple_string_dictionary.h",
+      "src/common/string_conversion.cc",
+      "src/common/string_conversion.h",
+      "src/google_breakpad/common/minidump_format.h",
+    ]
+    set_sources_assignment_filter(sources_assignment_filter)
+
+    include_dirs = [
+      "src",
+      "src/client/mac/Framework",
+      "src/common/mac",
+    ]
+
+    deps = [
+      "//third_party/google_toolbox_for_mac",
+    ]
+
+    public_configs = [ ":client_config" ]
+
+    if (is_clang) {
+      # See https://bugs.chromium.org/p/google-breakpad/issues/detail?id=675.
+      cflags = [ "-Wno-deprecated-declarations" ]
+    }
+  }
+  # TODO(GYP) There is some XCode-only targets like ninja-breakpad.
+}
+
+if (is_win) {
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+
+  config("breakpad_handler_warnings") {
+    if (is_clang) {
+      # See https://code.google.com/p/google-breakpad/issues/detail?id=658.
+      cflags = [ "-Wno-reorder" ]
+    }
+  }
+
+  static_library("breakpad_handler") {
+    configs += [ ":handler_config" ]
+    if (is_win) {
+      public_configs = [ ":handler_config" ]
+    }
+
+    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
+
+    sources = [
+      "src/client/windows/crash_generation/client_info.cc",
+      "src/client/windows/crash_generation/client_info.h",
+      "src/client/windows/crash_generation/crash_generation_client.cc",
+      "src/client/windows/crash_generation/crash_generation_client.h",
+      "src/client/windows/crash_generation/crash_generation_server.cc",
+      "src/client/windows/crash_generation/crash_generation_server.h",
+      "src/client/windows/crash_generation/minidump_generator.cc",
+      "src/client/windows/crash_generation/minidump_generator.h",
+      "src/client/windows/handler/exception_handler.cc",
+      "src/client/windows/handler/exception_handler.h",
+      "src/common/windows/guid_string.cc",
+      "src/common/windows/guid_string.h",
+      "src/common/windows/string_utils-inl.h",
+      "src/google_breakpad/common/minidump_format.h",
+    ]
+    configs += [ ":breakpad_handler_warnings" ]
+  }
+
+  source_set("breakpad_sender") {
+    sources = [
+      "src/client/windows/sender/crash_report_sender.cc",
+      "src/client/windows/sender/crash_report_sender.h",
+      "src/common/windows/http_upload.cc",
+      "src/common/windows/http_upload.h",
+    ]
+    configs += [ ":sender_config" ]
+    public_configs = [ ":sender_config" ]
+  }
+}
diff --git a/third_party/breakpad/LICENSE b/breakpad/LICENSE
similarity index 100%
rename from third_party/breakpad/LICENSE
rename to breakpad/LICENSE
diff --git a/third_party/breakpad/OWNERS b/breakpad/OWNERS
similarity index 100%
rename from third_party/breakpad/OWNERS
rename to breakpad/OWNERS
diff --git a/breakpad/README.chromium b/breakpad/README.chromium
new file mode 100644
index 0000000..bab0a12
--- /dev/null
+++ b/breakpad/README.chromium
@@ -0,0 +1,12 @@
+Name: Breakpad, An open-source multi-platform crash reporting system
+Short Name: breakpad
+URL: https://chromium.googlesource.com/breakpad/breakpad
+License: New BSD, Apple PSL 2.0 and Apache 2.0
+Security Critical: no
+
+This directory contains Chrome's version of Breakpad's Visual Studio build
+files (*.vcproj) and a compiled version of Breakpad's symupload.exe utility
+for Windows.
+
+Part of the upstream Breakpad project is pulled into the src/ subdirectory via
+DEPS.
diff --git a/third_party/breakpad/linux/breakpad_googletest_includes.h b/breakpad/linux/breakpad_googletest_includes.h
similarity index 99%
rename from third_party/breakpad/linux/breakpad_googletest_includes.h
rename to breakpad/linux/breakpad_googletest_includes.h
index ae55dffeb..aeab3156 100644
--- a/third_party/breakpad/linux/breakpad_googletest_includes.h
+++ b/breakpad/linux/breakpad_googletest_includes.h
@@ -30,7 +30,7 @@
 #ifndef BREAKPAD_GOOGLETEST_INCLUDES_H__
 #define BREAKPAD_GOOGLETEST_INCLUDES_H__
 
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gmock/include/gmock/gmock.h"
 
 #endif  // BREAKPAD_GOOGLETEST_INCLUDES_H__
diff --git a/third_party/breakpad/linux/generate-test-dump.cc b/breakpad/linux/generate-test-dump.cc
similarity index 90%
rename from third_party/breakpad/linux/generate-test-dump.cc
rename to breakpad/linux/generate-test-dump.cc
index a23af38..b0dca00 100644
--- a/third_party/breakpad/linux/generate-test-dump.cc
+++ b/breakpad/linux/generate-test-dump.cc
@@ -33,13 +33,12 @@
 
 #include <unistd.h>
 
-#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
-#include "third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h"
+#include "breakpad/src/client/linux/handler/exception_handler.h"
+#include "breakpad/src/common/linux/linux_libc_support.h"
 #include "third_party/lss/linux_syscall_support.h"
 
 static bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
-                         void* context,
-                         bool success) {
+                         void* context, bool success) {
   if (!success) {
     static const char msg[] = "Failed to write minidump\n";
     sys_write(2, msg, sizeof(msg) - 1);
diff --git a/third_party/breakpad/minidump_fuzzer.cc b/breakpad/minidump_fuzzer.cc
similarity index 99%
rename from third_party/breakpad/minidump_fuzzer.cc
rename to breakpad/minidump_fuzzer.cc
index 0854af7..8af4532 100644
--- a/third_party/breakpad/minidump_fuzzer.cc
+++ b/breakpad/minidump_fuzzer.cc
@@ -6,9 +6,9 @@
 #include <stdint.h>
 #include <string.h>
 
+#include <streambuf>
 #include <istream>
 #include <memory>
-#include <streambuf>
 
 #include "base/memory/free_deleter.h"
 #include "google_breakpad/processor/basic_source_line_resolver.h"
diff --git a/third_party/breakpad/minidump_fuzzer.dict b/breakpad/minidump_fuzzer.dict
similarity index 100%
rename from third_party/breakpad/minidump_fuzzer.dict
rename to breakpad/minidump_fuzzer.dict
diff --git a/third_party/breakpad/symupload.exe b/breakpad/symupload.exe
similarity index 100%
rename from third_party/breakpad/symupload.exe
rename to breakpad/symupload.exe
Binary files differ
diff --git a/third_party/breakpad/using_breakpad.vsprops b/breakpad/using_breakpad.vsprops
similarity index 68%
rename from third_party/breakpad/using_breakpad.vsprops
rename to breakpad/using_breakpad.vsprops
index cb3bb42..7d7ab92 100644
--- a/third_party/breakpad/using_breakpad.vsprops
+++ b/breakpad/using_breakpad.vsprops
@@ -6,6 +6,6 @@
 	>
 	<Tool
 		Name="VCCLCompilerTool"
-		AdditionalIncludeDirectories="&quot;$(SolutionDir)..\third_party\breakpad\breakpad\src&quot;"
+		AdditionalIncludeDirectories="&quot;$(SolutionDir)..\breakpad\src&quot;"
 	/>
 </VisualStudioPropertySheet>
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index c828018..cf36e40 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -199,6 +199,8 @@
           ":file_pre_reader",
           ":visual_elements_resources",
           "//base",
+          "//breakpad:breakpad_handler",
+          "//breakpad:breakpad_sender",
           "//chrome/app/version_assembly:chrome_exe_manifest",
           "//chrome/browser:active_use_util",
           "//chrome/browser:chrome_process_finder",
@@ -217,8 +219,6 @@
           "//crypto",
           "//gpu/config:crash_keys",
           "//sandbox",
-          "//third_party/breakpad:breakpad_handler",
-          "//third_party/breakpad:breakpad_sender",
         ]
         data_deps = [
           "//chrome/app/version_assembly:version_assembly_manifest",
@@ -1366,8 +1366,8 @@
         ":chrome_app",
         ":chrome_framework",
         ":chrome_helper_app",
+        "//breakpad:dump_syms",
         "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service",
-        "//third_party/breakpad:dump_syms",
         "//third_party/crashpad/crashpad/handler:crashpad_handler",
       ]
     }
@@ -1821,7 +1821,7 @@
     action("linux_symbols") {
       script = "//build/linux/dump_app_syms.py"
 
-      dump_syms_label = "//third_party/breakpad:dump_syms($host_toolchain)"
+      dump_syms_label = "//breakpad:dump_syms($host_toolchain)"
       dump_syms_binary =
           get_label_info(dump_syms_label, "root_out_dir") + "/" + "dump_syms"
 
diff --git a/chrome/app/DEPS b/chrome/app/DEPS
index 5ab2f4c..7e271d87 100644
--- a/chrome/app/DEPS
+++ b/chrome/app/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+breakpad",
   "+chrome/browser",
   "+chrome/child",
   "+chrome/chrome_watcher",
@@ -37,6 +38,5 @@
   "+sandbox",
   "+services/service_manager",
   "+services/ui/public",
-  "+third_party/breakpad/breakpad",
   "+third_party/crashpad/crashpad",
 ]
diff --git a/chrome/app/chrome_binaries.vsprops b/chrome/app/chrome_binaries.vsprops
index 8c4d981..7975c32 100644
--- a/chrome/app/chrome_binaries.vsprops
+++ b/chrome/app/chrome_binaries.vsprops
@@ -3,7 +3,7 @@
 	ProjectType="Visual C++"
 	Version="8.00"
 	Name="chrome_binaries"
-	InheritedPropertySheets="$(SolutionDir)..\third_party\ffmpeg\using_ffmpeg.vsprops;$(SolutionDir)..\third_party\breakpad\using_breakpad.vsprops;$(SolutionDir)..\third_party\libxml\build\using_libxml.vsprops;$(SolutionDir)..\third_party\libxslt\build\using_libxslt.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\third_party\libpng\using_libpng.vsprops;$(SolutionDir)..\tools\grit\build\using_generated_resources.vsprops;$(SolutionDir)third_party\wtl\using_wtl.vsprops"
+	InheritedPropertySheets="$(SolutionDir)..\third_party\ffmpeg\using_ffmpeg.vsprops;$(SolutionDir)..\breakpad\using_breakpad.vsprops;$(SolutionDir)..\third_party\libxml\build\using_libxml.vsprops;$(SolutionDir)..\third_party\libxslt\build\using_libxslt.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\third_party\libpng\using_libpng.vsprops;$(SolutionDir)..\tools\grit\build\using_generated_resources.vsprops;$(SolutionDir)third_party\wtl\using_wtl.vsprops"
 	>
 	<Tool
 		Name="VCLinkerTool"
diff --git a/chrome/app/chrome_exe.vsprops b/chrome/app/chrome_exe.vsprops
index 95b044a1..e42799c 100644
--- a/chrome/app/chrome_exe.vsprops
+++ b/chrome/app/chrome_exe.vsprops
@@ -3,7 +3,7 @@
 	ProjectType="Visual C++"
 	Version="8.00"
 	Name="chrome_exe"
-	InheritedPropertySheets="$(SolutionDir)..\third_party\breakpad\using_breakpad.vsprops"
+	InheritedPropertySheets="$(SolutionDir)..\breakpad\using_breakpad.vsprops"
 	>
 	<Tool
 		Name="VCCLCompilerTool"
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 7c9941b..9a51466 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2020,7 +2020,10 @@
   <message name="IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION" desc="Secondary, continued explanation of what content settings in Chrome do">
     Control what information websites can use and what content they can show you
   </message>
-  <message name="IDS_SETTINGS_CLEAR_DATA" desc="Text for clear browsing data button in Privacy options">
+  <message name="IDS_SETTINGS_CLEAR_DATA" desc="Text for clear browsing data button in Privacy options in the tabbed UI">
+    Clear data
+  </message>
+  <message name="IDS_SETTINGS_CLEAR_BROWSING_DATA" desc="Text for clear browsing data button in Privacy options">
     Clear browsing data
   </message>
   <message name="IDS_SETTINGS_CLEAR_DATA_DESCRIPTION" desc="Description for clear browsing data button in Privacy options. 'History' refers to browsing history. 'Cookies' refers to the technical meaning of a cookie, i.e. data saved by a website on the user's computer, as in when a website saves your preferences.">
diff --git a/chrome/browser/extensions/api/sync_file_system/sync_file_system_browsertest.cc b/chrome/browser/extensions/api/sync_file_system/sync_file_system_browsertest.cc
index 4a19a726..34c2ace 100644
--- a/chrome/browser/extensions/api/sync_file_system/sync_file_system_browsertest.cc
+++ b/chrome/browser/extensions/api/sync_file_system/sync_file_system_browsertest.cc
@@ -25,7 +25,8 @@
 #include "extensions/test/extension_test_message_listener.h"
 #include "extensions/test/result_catcher.h"
 #include "storage/browser/quota/quota_manager.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 
@@ -70,7 +71,7 @@
   }
 
   void SetUpOnMainThread() override {
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     extensions::PlatformAppBrowserTest::SetUpOnMainThread();
     ASSERT_TRUE(base_dir_.CreateUniqueTempDir());
 
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html
index c16364b..da0d5aee 100644
--- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html
+++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html
@@ -47,6 +47,10 @@
         color: var(--paper-grey-600);
       }
 
+      #clearBrowsingDataDialog [slot=body] {
+        padding-top: 8px;
+      }
+
       #importantSitesDialog {
         --cr-dialog-body-container: {
           height: var(--body-container-height);
@@ -78,14 +82,25 @@
       }
 
       paper-tabs {
+        --paper-tabs-selection-bar-color: var(--google-blue-500);
         --paper-tabs: {
           font-size: 100%;
           height: 40px;
         }
       }
 
+      paper-tab {
+        --paper-tab-content: {
+          color: var(--google-blue-700);
+        };
+        --paper-tab-content-unselected: {
+          opacity: 1;
+          color: var(--paper-grey-600);
+        };
+      }
+
       .time-range-row {
-        margin-bottom: 4px;
+        margin-bottom: 12px;
       }
 
       .time-range-select {
@@ -241,7 +256,7 @@
         <paper-button id="clearBrowsingDataConfirm"
             class="action-button" disabled="[[clearingInProgress_]]"
             on-tap="onClearBrowsingDataTap_">
-            $i18n{clearBrowsingData}
+            $i18n{clearData}
         </paper-button>
       </div>
     </dialog>
diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
index 29e314d35..dac3951 100644
--- a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
+++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
@@ -339,7 +339,6 @@
   } else {
     load_credentials_state_ = LOAD_CREDENTIALS_FINISHED_WITH_UNKNOWN_ERRORS;
   }
-  FireRefreshTokensLoaded();
 
   // Make sure that we have an entry for |loading_primary_account_id_| in the
   // map.  The entry could be missing if there is a corruption in the token DB
@@ -363,6 +362,7 @@
   }
 
   loading_primary_account_id_.clear();
+  FireRefreshTokensLoaded();
 }
 
 void MutableProfileOAuth2TokenServiceDelegate::LoadAllCredentialsIntoMemory(
diff --git a/chrome/browser/sync_file_system/drive_backend/conflict_resolver_unittest.cc b/chrome/browser/sync_file_system/drive_backend/conflict_resolver_unittest.cc
index ce086beb..b41fd655 100644
--- a/chrome/browser/sync_file_system/drive_backend/conflict_resolver_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/conflict_resolver_unittest.cc
@@ -34,7 +34,8 @@
 #include "google_apis/drive/drive_api_error_codes.h"
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -58,7 +59,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<FakeDriveServiceWrapper> fake_drive_service(
         new FakeDriveServiceWrapper);
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc b/chrome/browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc
index 4f9cd13..e802f2cd 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc
@@ -43,7 +43,8 @@
 #include "net/url_request/url_request_context_getter.h"
 #include "storage/browser/fileapi/file_system_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 #define FPL(a) FILE_PATH_LITERAL(a)
 
@@ -86,7 +87,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(base_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     io_task_runner_ = content::BrowserThread::GetTaskRunnerForThread(
         content::BrowserThread::IO);
diff --git a/chrome/browser/sync_file_system/drive_backend/leveldb_wrapper_unittest.cc b/chrome/browser/sync_file_system/drive_backend/leveldb_wrapper_unittest.cc
index 72dc6f5e..57d6c1e 100644
--- a/chrome/browser/sync_file_system/drive_backend/leveldb_wrapper_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/leveldb_wrapper_unittest.cc
@@ -15,8 +15,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -32,7 +33,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     InitializeLevelDB();
   }
 
diff --git a/chrome/browser/sync_file_system/drive_backend/list_changes_task_unittest.cc b/chrome/browser/sync_file_system/drive_backend/list_changes_task_unittest.cc
index e85cb3ae..4fa2c2d 100644
--- a/chrome/browser/sync_file_system/drive_backend/list_changes_task_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/list_changes_task_unittest.cc
@@ -24,7 +24,8 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -44,7 +45,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<drive::FakeDriveService> fake_drive_service(
         new drive::FakeDriveService);
diff --git a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer_unittest.cc b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer_unittest.cc
index 7aeb68f..71a6495 100644
--- a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer_unittest.cc
@@ -35,7 +35,8 @@
 #include "google_apis/drive/drive_api_error_codes.h"
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -59,7 +60,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<FakeDriveServiceWrapper> fake_drive_service(
         new FakeDriveServiceWrapper);
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
index 12aa04c..0985d6e 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -39,6 +39,7 @@
 #include "storage/common/fileapi/file_system_util.h"
 #include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/status.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
 
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
index 432dca6..bab5501b 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk_unittest.cc
@@ -19,8 +19,9 @@
 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/status.h"
 
 namespace sync_file_system {
@@ -41,7 +42,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     db_ = InitializeLevelDB();
     index_ = MetadataDatabaseIndexOnDisk::Create(db_.get());
   }
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_unittest.cc
index c6e5fff..b086bb5e 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_index_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_index_unittest.cc
@@ -16,8 +16,9 @@
 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -69,7 +70,7 @@
 class MetadataDatabaseIndexTest : public testing::Test {
  public:
   void SetUp() override {
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     InitializeLevelDB();
 
     contents_ = CreateTestDatabaseContents();
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
index 54012da..63ed69c5 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
@@ -29,8 +29,9 @@
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
 
 #define FPL(a) FILE_PATH_LITERAL(a)
@@ -199,7 +200,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
   }
 
   void TearDown() override { DropDatabase(); }
diff --git a/chrome/browser/sync_file_system/drive_backend/register_app_task_unittest.cc b/chrome/browser/sync_file_system/drive_backend/register_app_task_unittest.cc
index 834d5f5..bf27b24 100644
--- a/chrome/browser/sync_file_system/drive_backend/register_app_task_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/register_app_task_unittest.cc
@@ -32,8 +32,9 @@
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -51,7 +52,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<drive::FakeDriveService> fake_drive_service(
         new drive::FakeDriveService);
diff --git a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer_unittest.cc b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer_unittest.cc
index 6b50c7c..8b8d4b7b 100644
--- a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer_unittest.cc
@@ -31,7 +31,8 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "google_apis/drive/drive_api_error_codes.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -55,7 +56,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<drive::FakeDriveService> fake_drive_service(
         new drive::FakeDriveService);
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer_unittest.cc
index bbb331f..47902a5 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer_unittest.cc
@@ -28,7 +28,8 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "google_apis/drive/drive_api_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -52,7 +53,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     std::unique_ptr<drive::FakeDriveService> fake_drive_service(
         new drive::FakeDriveService);
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_worker_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_worker_unittest.cc
index d6193e14..6b337fc5 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_worker_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_worker_unittest.cc
@@ -28,7 +28,8 @@
 #include "extensions/common/extension_set.h"
 #include "extensions/common/value_builder.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace sync_file_system {
 namespace drive_backend {
@@ -105,7 +106,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(profile_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     extension_service_.reset(new MockExtensionService);
     std::unique_ptr<drive::DriveServiceInterface> fake_drive_service(
diff --git a/chrome/browser/sync_file_system/local/local_file_change_tracker.cc b/chrome/browser/sync_file_system/local/local_file_change_tracker.cc
index b8a8b232..bb777ad 100644
--- a/chrome/browser/sync_file_system/local/local_file_change_tracker.cc
+++ b/chrome/browser/sync_file_system/local/local_file_change_tracker.cc
@@ -22,7 +22,9 @@
 #include "storage/browser/fileapi/file_system_operation_context.h"
 #include "storage/common/fileapi/file_system_util.h"
 #include "third_party/leveldatabase/env_chromium.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
 
 using storage::FileSystemContext;
diff --git a/chrome/browser/sync_file_system/local/local_file_change_tracker_unittest.cc b/chrome/browser/sync_file_system/local/local_file_change_tracker_unittest.cc
index 68d0183..90c1a87 100644
--- a/chrome/browser/sync_file_system/local/local_file_change_tracker_unittest.cc
+++ b/chrome/browser/sync_file_system/local/local_file_change_tracker_unittest.cc
@@ -25,7 +25,8 @@
 #include "storage/browser/quota/quota_manager.h"
 #include "storage/browser/test/mock_blob_url_request_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using content::MockBlobURLRequestContext;
 using content::ScopedTextBlob;
@@ -39,7 +40,7 @@
  public:
   LocalFileChangeTrackerTest()
       : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
-        in_memory_env_(leveldb_chrome::NewMemEnv(leveldb::Env::Default())),
+        in_memory_env_(leveldb::NewMemEnv(leveldb::Env::Default())),
         file_system_(GURL("http://example.com"),
                      in_memory_env_.get(),
                      base::ThreadTaskRunnerHandle::Get().get(),
diff --git a/chrome/browser/sync_file_system/local/local_file_sync_context_unittest.cc b/chrome/browser/sync_file_system/local/local_file_sync_context_unittest.cc
index de43b584..6b7b4f25 100644
--- a/chrome/browser/sync_file_system/local/local_file_sync_context_unittest.cc
+++ b/chrome/browser/sync_file_system/local/local_file_sync_context_unittest.cc
@@ -33,7 +33,8 @@
 #include "storage/browser/fileapi/isolated_context.h"
 #include "storage/browser/test/mock_blob_url_request_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 #define FPL FILE_PATH_LITERAL
 
@@ -67,7 +68,7 @@
   void SetUp() override {
     RegisterSyncableFileSystem();
     ASSERT_TRUE(dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     ui_task_runner_ = base::ThreadTaskRunnerHandle::Get();
     io_task_runner_ = BrowserThread::GetTaskRunnerForThread(BrowserThread::IO);
diff --git a/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc b/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc
index 9a86c4a2..508fec65 100644
--- a/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc
+++ b/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc
@@ -36,7 +36,8 @@
 #include "storage/browser/fileapi/file_system_context.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using content::BrowserThread;
 using storage::FileSystemURL;
@@ -113,7 +114,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
 
     file_system_.reset(new CannedSyncableFileSystem(
         GURL(kOrigin), in_memory_env_.get(),
diff --git a/chrome/browser/sync_file_system/local/syncable_file_operation_runner_unittest.cc b/chrome/browser/sync_file_system/local/syncable_file_operation_runner_unittest.cc
index 71d850e9..507e0775 100644
--- a/chrome/browser/sync_file_system/local/syncable_file_operation_runner_unittest.cc
+++ b/chrome/browser/sync_file_system/local/syncable_file_operation_runner_unittest.cc
@@ -29,7 +29,8 @@
 #include "storage/browser/fileapi/file_system_operation_runner.h"
 #include "storage/browser/test/mock_blob_url_request_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using storage::FileSystemOperation;
 using storage::FileSystemURL;
@@ -55,7 +56,7 @@
   // operations in the tests.
   SyncableFileOperationRunnerTest()
       : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
-        in_memory_env_(leveldb_chrome::NewMemEnv(leveldb::Env::Default())),
+        in_memory_env_(leveldb::NewMemEnv(leveldb::Env::Default())),
         file_system_(GURL("http://example.com"),
                      in_memory_env_.get(),
                      base::ThreadTaskRunnerHandle::Get().get(),
diff --git a/chrome/browser/sync_file_system/local/syncable_file_system_unittest.cc b/chrome/browser/sync_file_system/local/syncable_file_system_unittest.cc
index 0c0c5bef..bee39ec 100644
--- a/chrome/browser/sync_file_system/local/syncable_file_system_unittest.cc
+++ b/chrome/browser/sync_file_system/local/syncable_file_system_unittest.cc
@@ -22,7 +22,8 @@
 #include "storage/common/fileapi/file_system_types.h"
 #include "storage/common/quota/quota_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using content::SandboxFileSystemTestHelper;
 using storage::FileSystemContext;
@@ -37,7 +38,7 @@
 class SyncableFileSystemTest : public testing::Test {
  public:
   SyncableFileSystemTest()
-      : in_memory_env_(leveldb_chrome::NewMemEnv(leveldb::Env::Default())),
+      : in_memory_env_(leveldb::NewMemEnv(leveldb::Env::Default())),
         file_system_(GURL("http://example.com/"),
                      in_memory_env_.get(),
                      base::ThreadTaskRunnerHandle::Get().get(),
diff --git a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc
index 756f147c..f00b719e 100644
--- a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc
+++ b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc
@@ -33,7 +33,8 @@
 #include "content/public/test/test_utils.h"
 #include "storage/browser/fileapi/file_system_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using content::BrowserThread;
 using storage::FileSystemURL;
@@ -131,7 +132,7 @@
       : thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD) {}
 
   void SetUp() override {
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     file_system_.reset(new CannedSyncableFileSystem(
         GURL(kOrigin), in_memory_env_.get(),
         BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
index 72d654b..d5e35ee 100644
--- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -1532,7 +1532,8 @@
     {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS},
     {"siteSettings", IDS_SETTINGS_SITE_SETTINGS},
     {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION},
-    {"clearBrowsingData", IDS_SETTINGS_CLEAR_DATA},
+    {"clearData", IDS_SETTINGS_CLEAR_DATA},
+    {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
     {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
     {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
   };
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index f16fd52..352d122 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -209,8 +209,8 @@
       "//chrome/app/chrome_crash_reporter_client_mac.mm",
     ]
     public_deps += [
+      "//breakpad",
       "//components/crash/content/app",
-      "//third_party/breakpad",
       "//third_party/ocmock",
     ]
   }
@@ -5096,12 +5096,12 @@
       ":test_support",
       "//base/test:run_all_unittests",
       "//base/test:test_support",
+      "//breakpad:client",
       "//chrome/browser",
       "//chrome/child",
       "//components/crash/core/common",
       "//components/flags_ui:switches",
       "//gpu/config:crash_keys",
-      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chrome_elf/DEPS b/chrome_elf/DEPS
index 978ee22..484d1cf 100644
--- a/chrome_elf/DEPS
+++ b/chrome_elf/DEPS
@@ -1,11 +1,11 @@
 include_rules = [
+  "+sandbox",
+  "+breakpad/src/client",
   "+chrome/app/chrome_crash_reporter_client_win.h",
   "+chrome/common/chrome_switches.h",
   "+chrome/common/chrome_version.h",
   "+chrome/install_static",
+  "+third_party/crashpad/crashpad/client/crashpad_client.h",
   "+components/crash/content/app/crashpad.h",
   "+components/crash/core/common/crash_keys.h",
-  "+sandbox",
-  "+third_party/breakpad/breakpad/src/client",
-  "+third_party/crashpad/crashpad/client/crashpad_client.h",
 ]
diff --git a/chromecast/app/BUILD.gn b/chromecast/app/BUILD.gn
index 928c715..885334c 100644
--- a/chromecast/app/BUILD.gn
+++ b/chromecast/app/BUILD.gn
@@ -50,9 +50,9 @@
 
   if (is_android) {
     deps += [
+      "//breakpad:client",
       "//chromecast/base:cast_version",
       "//chromecast/browser:jni_headers",
-      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chromecast/app/android/DEPS b/chromecast/app/android/DEPS
index 78006b0..f9e9e330 100644
--- a/chromecast/app/android/DEPS
+++ b/chromecast/app/android/DEPS
@@ -1,6 +1,6 @@
 include_rules = [
+  "+breakpad",
   "+chromecast/android",
   "+chromecast/browser/android",
   "+jni",
-  "+third_party/breakpad",
 ]
diff --git a/chromecast/app/android/crash_handler.cc b/chromecast/app/android/crash_handler.cc
index 44f75a4..194f0bc 100644
--- a/chromecast/app/android/crash_handler.cc
+++ b/chromecast/app/android/crash_handler.cc
@@ -13,14 +13,14 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
+#include "breakpad/src/client/linux/handler/exception_handler.h"
+#include "breakpad/src/client/linux/handler/minidump_descriptor.h"
 #include "chromecast/app/android/cast_crash_reporter_client_android.h"
 #include "chromecast/base/version.h"
 #include "components/crash/content/app/breakpad_linux.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "content/public/common/content_switches.h"
 #include "jni/CastCrashHandler_jni.h"
-#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
-#include "third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h"
 
 namespace {
 
diff --git a/chromecast/crash/BUILD.gn b/chromecast/crash/BUILD.gn
index 7f40688..e9da31b 100644
--- a/chromecast/crash/BUILD.gn
+++ b/chromecast/crash/BUILD.gn
@@ -32,13 +32,13 @@
 
   deps = [
     "//base",
+    "//breakpad:client",
     "//chromecast/base",
     "//chromecast/base:cast_version",
     "//components/crash/core/common",
     "//components/metrics",
     "//components/prefs",
     "//gpu/config:crash_keys",
-    "//third_party/breakpad:client",
   ]
 
   if (chromecast_branding == "public") {
@@ -97,13 +97,13 @@
       "//base",
       "//base/test:run_all_unittests",
       "//base/test:test_support",
+      "//breakpad:client",
       "//chromecast/base:cast_sys_info",
       "//chromecast/base:test_support",
       "//components/metrics",
       "//components/prefs:test_support",
       "//testing/gmock",
       "//testing/gtest",
-      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chromecast/crash/DEPS b/chromecast/crash/DEPS
index 83894d3..f5bcf98 100644
--- a/chromecast/crash/DEPS
+++ b/chromecast/crash/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
+  "+breakpad",
   "+components/crash/core/common",
   "+gpu/config/gpu_crash_keys.h",
-  "+third_party/breakpad",
 ]
diff --git a/chromecast/crash/cast_crashdump_uploader.cc b/chromecast/crash/cast_crashdump_uploader.cc
index 1454f158..b02eee7e 100644
--- a/chromecast/crash/cast_crashdump_uploader.cc
+++ b/chromecast/crash/cast_crashdump_uploader.cc
@@ -10,13 +10,12 @@
 #include "base/memory/ptr_util.h"
 // TODO(slan): Find a replacement for LibcurlWrapper in Chromium to remove the
 // breakpad dependency.
-#include "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
+#include "breakpad/src/common/linux/libcurl_wrapper.h"
 
 namespace chromecast {
 namespace {
 
-// Keep these in sync with
-// //third_party/breakpad/breakpad/src/client/mac/sender/uploader.mm
+// Keep these in sync with "//breakpad/src/client/mac/sender/uploader.mm"
 const char kProdKey[] = "prod";
 const char kVerKey[] = "ver";
 const char kGuidKey[] = "guid";
diff --git a/chromecast/crash/cast_crashdump_uploader_unittest.cc b/chromecast/crash/cast_crashdump_uploader_unittest.cc
index 97f9e402..b9daa80 100644
--- a/chromecast/crash/cast_crashdump_uploader_unittest.cc
+++ b/chromecast/crash/cast_crashdump_uploader_unittest.cc
@@ -6,11 +6,11 @@
 
 #include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
+#include "breakpad/src/common/linux/libcurl_wrapper.h"
 #include "chromecast/base/scoped_temp_file.h"
 #include "chromecast/crash/cast_crashdump_uploader.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
 
 namespace chromecast {
 
@@ -186,4 +186,4 @@
   ASSERT_TRUE(uploader.Upload(nullptr));
 }
 
-}  // namespace chromecast
+}  // namespace chromeceast
diff --git a/components/crash/content/DEPS b/components/crash/content/DEPS
index ddabec25..9ebc497 100644
--- a/components/crash/content/DEPS
+++ b/components/crash/content/DEPS
@@ -1,3 +1,3 @@
 include_rules = [
-  "+third_party/breakpad",
+  "+breakpad",
 ]
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn
index 8e6bad3..5b68bc7 100644
--- a/components/crash/content/app/BUILD.gn
+++ b/components/crash/content/app/BUILD.gn
@@ -15,14 +15,14 @@
     "crash_reporter_client.h",
   ]
 
-  include_dirs = [ "../../../../third_party/breakpad/breakpad/src" ]
+  include_dirs = [ "../../../../breakpad/src" ]
 
   deps = [
     "//base",
   ]
 
   if (is_win) {
-    deps += [ "//third_party/breakpad:breakpad_handler" ]
+    deps += [ "//breakpad:breakpad_handler" ]
   }
 }
 
@@ -213,11 +213,11 @@
 
   if (is_win) {
     deps += [
+      "//breakpad:breakpad_handler",
       "//sandbox",
-      "//third_party/breakpad:breakpad_handler",
     ]
   } else if (is_posix && !is_ios) {
-    deps += [ "//third_party/breakpad:client" ]
+    deps += [ "//breakpad:client" ]
   }
 }
 
@@ -249,18 +249,18 @@
     deps += [
       "//base",
       "//base:base_static",
+      "//breakpad:client",
       "//components/crash/core/common",
       "//content/public/common:result_codes",
       "//sandbox",
-      "//third_party/breakpad:client",
     ]
 
     if (is_mac) {
-      deps += [ "//third_party/breakpad" ]
+      deps += [ "//breakpad" ]
     }
 
     if (is_win) {
-      deps += [ "//third_party/breakpad:breakpad_handler" ]
+      deps += [ "//breakpad:breakpad_handler" ]
       libs = [ "userenv.lib" ]
     }
   }
@@ -299,7 +299,7 @@
   if (is_win) {
     deps += [
       ":run_as_crashpad_handler",
-      "//third_party/breakpad:client",
+      "//breakpad:client",
       "//third_party/crashpad/crashpad/client:client",
       "//third_party/crashpad/crashpad/snapshot:snapshot",
       "//third_party/crashpad/crashpad/util",
diff --git a/components/crash/content/app/breakpad_linux.cc b/components/crash/content/app/breakpad_linux.cc
index 1800a7d..2199920 100644
--- a/components/crash/content/app/breakpad_linux.cc
+++ b/components/crash/content/app/breakpad_linux.cc
@@ -40,16 +40,16 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_checker.h"
+#include "breakpad/src/client/linux/crash_generation/crash_generation_client.h"
+#include "breakpad/src/client/linux/handler/exception_handler.h"
+#include "breakpad/src/client/linux/minidump_writer/directory_reader.h"
+#include "breakpad/src/common/linux/linux_libc_support.h"
+#include "breakpad/src/common/memory.h"
 #include "build/build_config.h"
 #include "components/crash/content/app/breakpad_linux_impl.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/core/common/crash_keys.h"
 #include "content/public/common/content_descriptors.h"
-#include "third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_client.h"
-#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
-#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/directory_reader.h"
-#include "third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h"
-#include "third_party/breakpad/breakpad/src/common/memory.h"
 
 #if defined(OS_ANDROID)
 #include <android/log.h>
@@ -192,8 +192,8 @@
 }
 
 // uint64_t version of my_int_len() from
-// third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h. Return
-// the length of the given, non-negative integer when expressed in base 10.
+// breakpad/src/common/linux/linux_libc_support.h. Return the length of the
+// given, non-negative integer when expressed in base 10.
 unsigned my_uint64_len(uint64_t i) {
   if (!i)
     return 1;
@@ -208,8 +208,8 @@
 }
 
 // uint64_t version of my_uitos() from
-// third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h. Convert
-// a non-negative integer to a string (not null-terminated).
+// breakpad/src/common/linux/linux_libc_support.h. Convert a non-negative
+// integer to a string (not null-terminated).
 void my_uint64tos(char* output, uint64_t i, unsigned i_len) {
   for (unsigned index = i_len; index; --index, i /= 10)
     output[index - 1] = '0' + (i % 10);
diff --git a/components/crash/content/app/breakpad_linux_impl.h b/components/crash/content/app/breakpad_linux_impl.h
index 6b224a9..d4eab16 100644
--- a/components/crash/content/app/breakpad_linux_impl.h
+++ b/components/crash/content/app/breakpad_linux_impl.h
@@ -12,8 +12,8 @@
 #include <stdint.h>
 #include <sys/types.h>
 
+#include "breakpad/src/common/simple_string_dictionary.h"
 #include "components/crash/content/app/breakpad_linux.h"
-#include "third_party/breakpad/breakpad/src/common/simple_string_dictionary.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/breakpad_mac.mm b/components/crash/content/app/breakpad_mac.mm
index 5ade381..d7ab1ae6 100644
--- a/components/crash/content/app/breakpad_mac.mm
+++ b/components/crash/content/app/breakpad_mac.mm
@@ -26,10 +26,10 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_restrictions.h"
+#import "breakpad/src/client/mac/Framework/Breakpad.h"
+#include "breakpad/src/common/simple_string_dictionary.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/core/common/crash_keys.h"
-#import "third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h"
-#include "third_party/breakpad/breakpad/src/common/simple_string_dictionary.h"
 
 using crash_reporter::GetCrashReporterClient;
 
diff --git a/components/crash/content/app/breakpad_win.cc b/components/crash/content/app/breakpad_win.cc
index d5680a8..0604383e 100644
--- a/components/crash/content/app/breakpad_win.cc
+++ b/components/crash/content/app/breakpad_win.cc
@@ -32,6 +32,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/pe_image.h"
 #include "base/win/win_util.h"
+#include "breakpad/src/client/windows/common/ipc_protocol.h"
+#include "breakpad/src/client/windows/handler/exception_handler.h"
 #include "components/crash/content/app/crash_keys_win.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/content/app/hard_error_handler_win.h"
@@ -39,8 +41,6 @@
 #include "content/public/common/result_codes.h"
 #include "sandbox/win/src/nt_internals.h"
 #include "sandbox/win/src/sidestep/preamble_patcher.h"
-#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
-#include "third_party/breakpad/breakpad/src/client/windows/handler/exception_handler.h"
 
 #pragma intrinsic(_AddressOfReturnAddress)
 #pragma intrinsic(_ReturnAddress)
diff --git a/components/crash/content/app/crash_keys_win.cc b/components/crash/content/app/crash_keys_win.cc
index 7df7135..c7ea488 100644
--- a/components/crash/content/app/crash_keys_win.cc
+++ b/components/crash/content/app/crash_keys_win.cc
@@ -11,8 +11,8 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "breakpad/src/client/windows/common/ipc_protocol.h"
 #include "components/crash/content/app/crash_reporter_client.h"
-#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/crash_keys_win_unittest.cc b/components/crash/content/app/crash_keys_win_unittest.cc
index 99da0ab..aebe4535 100644
--- a/components/crash/content/app/crash_keys_win_unittest.cc
+++ b/components/crash/content/app/crash_keys_win_unittest.cc
@@ -9,10 +9,10 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/strings/stringprintf.h"
+#include "breakpad/src/client/windows/common/ipc_protocol.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/crash_reporter_client.h b/components/crash/content/app/crash_reporter_client.h
index 46ba162..9f69c193 100644
--- a/components/crash/content/app/crash_reporter_client.h
+++ b/components/crash/content/app/crash_reporter_client.h
@@ -20,8 +20,8 @@
 
 #if defined(OS_MACOSX)
 // We don't want to directly include
-// third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h here, so we
-// repeat the definition of BreakpadRef.
+// breakpad/src/client/mac/Framework/Breakpad.h here, so we repeat the
+// definition of BreakpadRef.
 //
 // On Mac, when compiling without breakpad support, a stub implementation is
 // compiled in. Not having any includes of the breakpad library allows for
diff --git a/components/crash/content/browser/BUILD.gn b/components/crash/content/browser/BUILD.gn
index ecbfce2..94e18cb 100644
--- a/components/crash/content/browser/BUILD.gn
+++ b/components/crash/content/browser/BUILD.gn
@@ -18,10 +18,10 @@
 
   deps = [
     "//base",
+    "//breakpad:client",
     "//components/crash/content/app",
     "//content/public/browser",
     "//content/public/common",
-    "//third_party/breakpad:client",
   ]
 
   if (is_linux || is_android) {
@@ -33,16 +33,16 @@
       "crash_handler_host_linux.h",
     ]
     deps += [
+      "//breakpad:client",
       "//components/crash/content/app:app_non_mac_win",
-      "//third_party/breakpad:client",
     ]
   }
 
   # This is not in the GYP build but this target includes breakpad client
   # headers, so add the dependency here.
   if (is_posix && !is_ios) {
-    configs += [ "//third_party/breakpad:client_config" ]
-    public_configs = [ "//third_party/breakpad:client_config" ]
+    configs += [ "//breakpad:client_config" ]
+    public_configs = [ "//breakpad:client_config" ]
   }
 
   if (is_android) {
diff --git a/components/crash/content/browser/crash_handler_host_linux.cc b/components/crash/content/browser/crash_handler_host_linux.cc
index f656cf17..c1db248 100644
--- a/components/crash/content/browser/crash_handler_host_linux.cc
+++ b/components/crash/content/browser/crash_handler_host_linux.cc
@@ -33,12 +33,12 @@
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "breakpad/src/client/linux/handler/exception_handler.h"
+#include "breakpad/src/client/linux/minidump_writer/linux_dumper.h"
+#include "breakpad/src/client/linux/minidump_writer/minidump_writer.h"
 #include "build/build_config.h"
 #include "components/crash/content/app/breakpad_linux_impl.h"
 #include "content/public/browser/browser_thread.h"
-#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
-#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h"
-#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h"
 
 #if defined(OS_ANDROID) && !defined(__LP64__)
 #include <sys/linux-syscalls.h>
diff --git a/components/crash/content/tools/BUILD.gn b/components/crash/content/tools/BUILD.gn
index 99010f05..6206020 100644
--- a/components/crash/content/tools/BUILD.gn
+++ b/components/crash/content/tools/BUILD.gn
@@ -12,7 +12,7 @@
 
   deps = [
     "//base",
-    "//third_party/breakpad:breakpad_handler",
-    "//third_party/breakpad:breakpad_sender",
+    "//breakpad:breakpad_handler",
+    "//breakpad:breakpad_sender",
   ]
 }
diff --git a/components/crash/content/tools/crash_service.cc b/components/crash/content/tools/crash_service.cc
index c7a5a79..46b6359 100644
--- a/components/crash/content/tools/crash_service.cc
+++ b/components/crash/content/tools/crash_service.cc
@@ -15,9 +15,9 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/client_info.h"
-#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/crash_generation_server.h"
-#include "third_party/breakpad/breakpad/src/client/windows/sender/crash_report_sender.h"
+#include "breakpad/src/client/windows/crash_generation/client_info.h"
+#include "breakpad/src/client/windows/crash_generation/crash_generation_server.h"
+#include "breakpad/src/client/windows/sender/crash_report_sender.h"
 
 namespace breakpad {
 
diff --git a/components/data_reduction_proxy/core/browser/data_store_impl.cc b/components/data_reduction_proxy/core/browser/data_store_impl.cc
index 4b658b3..37b69fe 100644
--- a/components/data_reduction_proxy/core/browser/data_store_impl.cc
+++ b/components/data_reduction_proxy/core/browser/data_store_impl.cc
@@ -13,6 +13,7 @@
 #include "components/data_reduction_proxy/proto/data_store.pb.h"
 #include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/options.h"
 #include "third_party/leveldatabase/src/include/leveldb/status.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
diff --git a/components/leveldb/leveldb_service_impl.cc b/components/leveldb/leveldb_service_impl.cc
index d0d63f6f..01295b2 100644
--- a/components/leveldb/leveldb_service_impl.cc
+++ b/components/leveldb/leveldb_service_impl.cc
@@ -12,9 +12,9 @@
 #include "components/leveldb/leveldb_database_impl.h"
 #include "components/leveldb/public/cpp/util.h"
 #include "mojo/public/cpp/bindings/strong_associated_binding.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
 
diff --git a/components/leveldb_proto/leveldb_database.cc b/components/leveldb_proto/leveldb_database.cc
index d8a0ce1..5c3dcc61 100644
--- a/components/leveldb_proto/leveldb_database.cc
+++ b/components/leveldb_proto/leveldb_database.cc
@@ -12,11 +12,11 @@
 #include "base/metrics/histogram.h"
 #include "base/strings/string_split.h"
 #include "base/threading/thread_checker.h"
-#include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/leveldb_chrome.h"
 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/cache.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/iterator.h"
 #include "third_party/leveldatabase/src/include/leveldb/options.h"
 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
@@ -51,7 +51,7 @@
   leveldb_env::Options open_options = options;
 
   if (database_dir.empty()) {
-    env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     open_options.env = env_.get();
   }
 
diff --git a/components/nacl/broker/BUILD.gn b/components/nacl/broker/BUILD.gn
index e189f4e9..ef7773a 100644
--- a/components/nacl/broker/BUILD.gn
+++ b/components/nacl/broker/BUILD.gn
@@ -106,6 +106,7 @@
       ":nacl64_content",
       ":nacl64_crash_reporter_client",
       "//base",
+      "//breakpad:breakpad_handler",
       "//build/win:default_exe_manifest",
       "//chrome:nacl64_exe_version",
       "//chrome/install_static:install_static_util",
@@ -115,7 +116,6 @@
       "//content/public/common:static_switches",
       "//ppapi/proxy:ipc",
       "//sandbox",
-      "//third_party/breakpad:breakpad_handler",
     ]
   }
 
diff --git a/components/security_state/core/security_state.cc b/components/security_state/core/security_state.cc
index 8a1789e..a7982a8 100644
--- a/components/security_state/core/security_state.cc
+++ b/components/security_state/core/security_state.cc
@@ -359,4 +359,19 @@
 
 VisibleSecurityState::~VisibleSecurityState() {}
 
+bool IsSchemeCryptographic(const GURL& url) {
+  return url.is_valid() && url.SchemeIsCryptographic();
+}
+
+bool IsOriginLocalhostOrFile(const GURL& url) {
+  return url.is_valid() &&
+         (net::IsLocalhost(url.HostNoBracketsPiece()) || url.SchemeIsFile());
+}
+
+bool IsSslCertificateValid(security_state::SecurityLevel security_level) {
+  return security_level == security_state::SECURE ||
+         security_level == security_state::EV_SECURE ||
+         security_level == security_state::SECURE_WITH_POLICY_INSTALLED_CERT;
+}
+
 }  // namespace security_state
diff --git a/components/security_state/core/security_state.h b/components/security_state/core/security_state.h
index dab5dd88..4ced0e3 100644
--- a/components/security_state/core/security_state.h
+++ b/components/security_state/core/security_state.h
@@ -12,6 +12,7 @@
 #include "base/feature_list.h"
 #include "base/macros.h"
 #include "components/security_state/core/insecure_input_event_data.h"
+#include "net/base/url_util.h"
 #include "net/cert/cert_status_flags.h"
 #include "net/cert/sct_status_flags.h"
 #include "net/cert/x509_certificate.h"
@@ -224,6 +225,17 @@
 // |kHttpFormWarningFeature| feature.
 bool IsHttpWarningInFormEnabled();
 
+// Returns true for a valid |url| with a cryptographic scheme, e.g., HTTPS,
+// HTTPS-SO, WSS.
+bool IsSchemeCryptographic(const GURL& url);
+
+// Returns true for a valid |url| with localhost or file:// scheme origin.
+bool IsOriginLocalhostOrFile(const GURL& url);
+
+// Returns true if the page has a valid SSL certificate. Only EV_SECURE,
+// SECURE, and SECURE_WITH_POLICY_INSTALLED_CERT are considered valid.
+bool IsSslCertificateValid(security_state::SecurityLevel security_level);
+
 }  // namespace security_state
 
 #endif  // COMPONENTS_SECURITY_STATE_CORE_SECURITY_STATE_H_
diff --git a/components/security_state/core/security_state_unittest.cc b/components/security_state/core/security_state_unittest.cc
index e7ff70fd..d81055f 100644
--- a/components/security_state/core/security_state_unittest.cc
+++ b/components/security_state/core/security_state_unittest.cc
@@ -28,6 +28,10 @@
 
 const char kHttpsUrl[] = "https://foo.test/";
 const char kHttpUrl[] = "http://foo.test/";
+const char kHttpsSoUrl[] = "https-so://foo.test/";
+const char kLocalhostUrl[] = "http://localhost";
+const char kFileOrigin[] = "file://example_file";
+const char kWssUrl[] = "wss://foo.test/";
 
 // This list doesn't include data: URL, as data: URLs will be explicitly marked
 // as not secure.
@@ -635,4 +639,37 @@
   }
 }
 
+// Tests IsSchemeCryptographic function.
+TEST(SecurityStateTest, CryptographicSchemeUrl) {
+  // HTTPS is a cryptographic scheme.
+  EXPECT_TRUE(IsSchemeCryptographic(GURL(kHttpsUrl)));
+  // HTTPS-SO is a cryptographic scheme.
+  EXPECT_TRUE(IsSchemeCryptographic(GURL(kHttpsSoUrl)));
+  // WSS is a cryptographic scheme.
+  EXPECT_TRUE(IsSchemeCryptographic(GURL(kWssUrl)));
+  // HTTP is not a cryptographic scheme.
+  EXPECT_FALSE(IsSchemeCryptographic(GURL(kHttpUrl)));
+  // Return true only for valid |url|
+  EXPECT_FALSE(IsSchemeCryptographic(GURL("https://")));
+}
+
+// Tests IsOriginLocalhostOrFile function.
+TEST(SecurityStateTest, LocalhostOrFileUrl) {
+  EXPECT_TRUE(IsOriginLocalhostOrFile(GURL(kLocalhostUrl)));
+  EXPECT_TRUE(IsOriginLocalhostOrFile(GURL(kFileOrigin)));
+  EXPECT_FALSE(IsOriginLocalhostOrFile(GURL(kHttpsUrl)));
+}
+
+// Tests IsSslCertificateValid function.
+TEST(SecurityStateTest, SslCertificateValid) {
+  EXPECT_TRUE(IsSslCertificateValid(SecurityLevel::SECURE));
+  EXPECT_TRUE(IsSslCertificateValid(SecurityLevel::EV_SECURE));
+  EXPECT_TRUE(
+      IsSslCertificateValid(SecurityLevel::SECURE_WITH_POLICY_INSTALLED_CERT));
+
+  EXPECT_FALSE(IsSslCertificateValid(SecurityLevel::NONE));
+  EXPECT_FALSE(IsSslCertificateValid(SecurityLevel::DANGEROUS));
+  EXPECT_FALSE(IsSslCertificateValid(SecurityLevel::HTTP_SHOW_WARNING));
+}
+
 }  // namespace security_state
diff --git a/components/sync/model_impl/model_type_store_backend.cc b/components/sync/model_impl/model_type_store_backend.cc
index 9d3c65f..4c0fedc 100644
--- a/components/sync/model_impl/model_type_store_backend.cc
+++ b/components/sync/model_impl/model_type_store_backend.cc
@@ -13,8 +13,9 @@
 #include "base/synchronization/lock.h"
 #include "components/sync/protocol/model_type_store_schema_descriptor.pb.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/iterator.h"
 #include "third_party/leveldatabase/src/include/leveldb/options.h"
 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
@@ -106,7 +107,7 @@
 }
 
 std::unique_ptr<leveldb::Env> ModelTypeStoreBackend::CreateInMemoryEnv() {
-  return base::WrapUnique(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+  return base::WrapUnique(leveldb::NewMemEnv(leveldb::Env::Default()));
 }
 
 // static
diff --git a/components/upload_list/crash_upload_list.h b/components/upload_list/crash_upload_list.h
index 166f8fed..cbb2d31 100644
--- a/components/upload_list/crash_upload_list.h
+++ b/components/upload_list/crash_upload_list.h
@@ -10,7 +10,7 @@
 class CrashUploadList {
  public:
   // Should match kReporterLogFilename in
-  // third_party/breakpad/breakpad/src/client/apple/Framework/BreakpadDefines.h.
+  // breakpad/src/client/apple/Framework/BreakpadDefines.h.
   static const char kReporterLogFilename[];
 
  private:
diff --git a/components/viz/client/client_layer_tree_frame_sink.cc b/components/viz/client/client_layer_tree_frame_sink.cc
index 03fec38..3b1da3f 100644
--- a/components/viz/client/client_layer_tree_frame_sink.cc
+++ b/components/viz/client/client_layer_tree_frame_sink.cc
@@ -15,49 +15,44 @@
 #include "components/viz/common/resources/shared_bitmap_manager.h"
 
 namespace viz {
+ClientLayerTreeFrameSink::InitParams::InitParams() {}
+
+ClientLayerTreeFrameSink::InitParams::~InitParams() {}
 
 ClientLayerTreeFrameSink::ClientLayerTreeFrameSink(
     scoped_refptr<ContextProvider> context_provider,
     scoped_refptr<ContextProvider> worker_context_provider,
-    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-    SharedBitmapManager* shared_bitmap_manager,
-    std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source,
-    mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info,
-    mojom::CompositorFrameSinkClientRequest client_request,
-    std::unique_ptr<HitTestDataProvider> hit_test_data_provider,
-    std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider,
-    bool enable_surface_synchronization)
+    InitParams* params)
     : cc::LayerTreeFrameSink(std::move(context_provider),
                              std::move(worker_context_provider),
-                             gpu_memory_buffer_manager,
-                             shared_bitmap_manager),
-      hit_test_data_provider_(std::move(hit_test_data_provider)),
-      local_surface_id_provider_(std::move(local_surface_id_provider)),
-      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
-      compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
-      client_request_(std::move(client_request)),
+                             params->gpu_memory_buffer_manager,
+                             params->shared_bitmap_manager),
+      hit_test_data_provider_(std::move(params->hit_test_data_provider)),
+      local_surface_id_provider_(std::move(params->local_surface_id_provider)),
+      synthetic_begin_frame_source_(
+          std::move(params->synthetic_begin_frame_source)),
+      compositor_frame_sink_info_(
+          std::move(params->compositor_frame_sink_info)),
+      client_request_(std::move(params->client_request)),
       client_binding_(this),
-      enable_surface_synchronization_(enable_surface_synchronization),
+      enable_surface_synchronization_(params->enable_surface_synchronization),
       weak_factory_(this) {
   DETACH_FROM_THREAD(thread_checker_);
 }
 
 ClientLayerTreeFrameSink::ClientLayerTreeFrameSink(
     scoped_refptr<VulkanContextProvider> vulkan_context_provider,
-    std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source,
-    mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info,
-    mojom::CompositorFrameSinkClientRequest client_request,
-    std::unique_ptr<HitTestDataProvider> hit_test_data_provider,
-    std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider,
-    bool enable_surface_synchronization)
+    InitParams* params)
     : cc::LayerTreeFrameSink(std::move(vulkan_context_provider)),
-      hit_test_data_provider_(std::move(hit_test_data_provider)),
-      local_surface_id_provider_(std::move(local_surface_id_provider)),
-      synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
-      compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
-      client_request_(std::move(client_request)),
+      hit_test_data_provider_(std::move(params->hit_test_data_provider)),
+      local_surface_id_provider_(std::move(params->local_surface_id_provider)),
+      synthetic_begin_frame_source_(
+          std::move(params->synthetic_begin_frame_source)),
+      compositor_frame_sink_info_(
+          std::move(params->compositor_frame_sink_info)),
+      client_request_(std::move(params->client_request)),
       client_binding_(this),
-      enable_surface_synchronization_(enable_surface_synchronization),
+      enable_surface_synchronization_(params->enable_surface_synchronization),
       weak_factory_(this) {
   DETACH_FROM_THREAD(thread_checker_);
 }
diff --git a/components/viz/client/client_layer_tree_frame_sink.h b/components/viz/client/client_layer_tree_frame_sink.h
index 01b28d13..953c4fab 100644
--- a/components/viz/client/client_layer_tree_frame_sink.h
+++ b/components/viz/client/client_layer_tree_frame_sink.h
@@ -25,26 +25,28 @@
                                  public mojom::CompositorFrameSinkClient,
                                  public ExternalBeginFrameSourceClient {
  public:
+  struct InitParams {
+    InitParams();
+    ~InitParams();
+
+    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = nullptr;
+    SharedBitmapManager* shared_bitmap_manager = nullptr;
+    std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source;
+    mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info;
+    mojom::CompositorFrameSinkClientRequest client_request;
+    std::unique_ptr<HitTestDataProvider> hit_test_data_provider;
+    std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider;
+    bool enable_surface_synchronization = false;
+  };
+
   ClientLayerTreeFrameSink(
       scoped_refptr<ContextProvider> context_provider,
       scoped_refptr<ContextProvider> worker_context_provider,
-      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-      SharedBitmapManager* shared_bitmap_manager,
-      std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source,
-      mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info,
-      mojom::CompositorFrameSinkClientRequest client_request,
-      std::unique_ptr<HitTestDataProvider> hit_test_data_provider,
-      std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider,
-      bool enable_surface_synchronization);
+      InitParams* params);
 
   ClientLayerTreeFrameSink(
       scoped_refptr<VulkanContextProvider> vulkan_context_provider,
-      std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source,
-      mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info,
-      mojom::CompositorFrameSinkClientRequest client_request,
-      std::unique_ptr<HitTestDataProvider> hit_test_data_provider,
-      std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider,
-      bool enable_surface_synchronization);
+      InitParams* params);
 
   ~ClientLayerTreeFrameSink() override;
 
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc b/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
index 3e648fc9..73daed7b 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper_unittest.cc
@@ -19,7 +19,9 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
 
diff --git a/content/browser/indexed_db/leveldb/leveldb_database.cc b/content/browser/indexed_db/leveldb/leveldb_database.cc
index e282cd06..a1cfdac6 100644
--- a/content/browser/indexed_db/leveldb/leveldb_database.cc
+++ b/content/browser/indexed_db/leveldb/leveldb_database.cc
@@ -32,10 +32,10 @@
 #include "content/browser/indexed_db/leveldb/leveldb_env.h"
 #include "content/browser/indexed_db/leveldb/leveldb_iterator_impl.h"
 #include "content/browser/indexed_db/leveldb/leveldb_write_batch.h"
-#include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/leveldb_chrome.h"
 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
 
@@ -342,7 +342,7 @@
   std::unique_ptr<ComparatorAdapter> comparator_adapter(
       base::MakeUnique<ComparatorAdapter>(comparator));
   std::unique_ptr<leveldb::Env> in_memory_env(
-      leveldb_chrome::NewMemEnv(LevelDBEnv::Get()));
+      leveldb::NewMemEnv(LevelDBEnv::Get()));
 
   std::unique_ptr<leveldb::DB> db;
   std::unique_ptr<const leveldb::FilterPolicy> filter_policy;
diff --git a/content/browser/notifications/notification_database.cc b/content/browser/notifications/notification_database.cc
index bb675a0..f2a1f0759 100644
--- a/content/browser/notifications/notification_database.cc
+++ b/content/browser/notifications/notification_database.cc
@@ -19,6 +19,7 @@
 #include "third_party/leveldatabase/leveldb_chrome.h"
 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
 #include "url/gurl.h"
@@ -129,7 +130,7 @@
   options.filter_policy = filter_policy_.get();
   options.block_cache = leveldb_chrome::GetSharedWebBlockCache();
   if (IsInMemoryDatabase()) {
-    env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     options.env = env_.get();
   }
 
diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc
index 7cabb53..62aad688 100644
--- a/content/browser/service_worker/service_worker_database.cc
+++ b/content/browser/service_worker/service_worker_database.cc
@@ -21,8 +21,9 @@
 #include "content/common/service_worker/service_worker_utils.h"
 #include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_registration.mojom.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
 #include "url/origin.h"
 
@@ -1277,7 +1278,7 @@
   leveldb_env::Options options;
   options.create_if_missing = create_if_missing;
   if (IsDatabaseInMemory()) {
-    env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     options.env = env_.get();
   } else {
     options.env = g_service_worker_env.Pointer();
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index 7306f1d..6f985986c 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -84,14 +84,16 @@
   viz::mojom::CompositorFrameSinkClientPtr client;
   viz::mojom::CompositorFrameSinkClientRequest client_request =
       mojo::MakeRequest(&client);
-  constexpr bool enable_surface_synchronization = true;
+  viz::ClientLayerTreeFrameSink::InitParams params;
+  params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
+  params.compositor_frame_sink_info = std::move(sink_info);
+  params.client_request = std::move(client_request);
+  params.local_surface_id_provider =
+      base::MakeUnique<viz::DefaultLocalSurfaceIdProvider>();
+  params.enable_surface_synchronization = true;
   auto frame_sink = base::MakeUnique<viz::ClientLayerTreeFrameSink>(
       std::move(context_provider), nullptr /* worker_context_provider */,
-      gpu_memory_buffer_manager, nullptr /* shared_bitmap_manager */,
-      nullptr /* synthetic_begin_frame_source */, std::move(sink_info),
-      std::move(client_request), nullptr /* hit_test_data_provider_ */,
-      base::MakeUnique<viz::DefaultLocalSurfaceIdProvider>(),
-      enable_surface_synchronization);
+      &params);
   tree_->AttachCompositorFrameSink(root_window_id_, std::move(sink_request),
                                    std::move(client));
   callback.Run(std::move(frame_sink));
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 5dc03fa..08eab73c 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -1937,18 +1937,20 @@
   if (command_line.HasSwitch(switches::kDisableGpuCompositing))
     use_software = true;
 
-  bool enable_surface_synchronization =
+  viz::ClientLayerTreeFrameSink::InitParams params;
+  params.enable_surface_synchronization =
       command_line.HasSwitch(switches::kEnableSurfaceSynchronization);
+  params.local_surface_id_provider =
+      base::MakeUnique<RendererLocalSurfaceIdProvider>();
 
   // In disable gpu vsync mode, also let the renderer tick as fast as it
   // can. The top level begin frame source will also be running as a back
   // to back begin frame source, but using a synthetic begin frame source
   // here reduces latency when in this mode (at least for frames
   // starting--it potentially increases it for input on the other hand.)
-  std::unique_ptr<viz::SyntheticBeginFrameSource> synthetic_begin_frame_source;
   if (command_line.HasSwitch(switches::kDisableGpuVsync) &&
       command_line.GetSwitchValueASCII(switches::kDisableGpuVsync) != "gpu") {
-    synthetic_begin_frame_source = CreateSyntheticBeginFrameSource();
+    params.synthetic_begin_frame_source = CreateSyntheticBeginFrameSource();
   }
 
 #if defined(USE_AURA)
@@ -1972,12 +1974,10 @@
   }
 #endif
 
-  viz::mojom::CompositorFrameSinkPtrInfo sink_info;
   viz::mojom::CompositorFrameSinkRequest sink_request =
-      mojo::MakeRequest(&sink_info);
+      mojo::MakeRequest(&params.compositor_frame_sink_info);
   viz::mojom::CompositorFrameSinkClientPtr client;
-  viz::mojom::CompositorFrameSinkClientRequest client_request =
-      mojo::MakeRequest(&client);
+  params.client_request = mojo::MakeRequest(&client);
 
   if (command_line.HasSwitch(switches::kEnableVulkan)) {
     scoped_refptr<viz::VulkanContextProvider> vulkan_context_provider =
@@ -1987,11 +1987,7 @@
       frame_sink_provider_->CreateForWidget(routing_id, std::move(sink_request),
                                             std::move(client));
       callback.Run(base::MakeUnique<viz::ClientLayerTreeFrameSink>(
-          std::move(vulkan_context_provider),
-          std::move(synthetic_begin_frame_source), std::move(sink_info),
-          std::move(client_request), nullptr /* hit_test_data_provider */,
-          base::MakeUnique<RendererLocalSurfaceIdProvider>(),
-          enable_surface_synchronization));
+          std::move(vulkan_context_provider), &params));
       return;
     }
   }
@@ -2016,12 +2012,9 @@
     DCHECK(!layout_test_mode());
     frame_sink_provider_->CreateForWidget(routing_id, std::move(sink_request),
                                           std::move(client));
+    params.shared_bitmap_manager = shared_bitmap_manager();
     callback.Run(base::MakeUnique<viz::ClientLayerTreeFrameSink>(
-        nullptr, nullptr, nullptr, shared_bitmap_manager(),
-        std::move(synthetic_begin_frame_source), std::move(sink_info),
-        std::move(client_request), nullptr /* hit_test_data_provider */,
-        base::MakeUnique<RendererLocalSurfaceIdProvider>(),
-        enable_surface_synchronization));
+        nullptr, nullptr, &params));
     return;
   }
 
@@ -2076,8 +2069,8 @@
 #if defined(OS_ANDROID)
   if (sync_compositor_message_filter_) {
     std::unique_ptr<viz::BeginFrameSource> begin_frame_source =
-        synthetic_begin_frame_source
-            ? std::move(synthetic_begin_frame_source)
+        params.synthetic_begin_frame_source
+            ? std::move(params.synthetic_begin_frame_source)
             : CreateExternalBeginFrameSource(routing_id);
     callback.Run(base::MakeUnique<SynchronousLayerTreeFrameSink>(
         std::move(context_provider), std::move(worker_context_provider),
@@ -2090,13 +2083,10 @@
 #endif
   frame_sink_provider_->CreateForWidget(routing_id, std::move(sink_request),
                                         std::move(client));
+  params.gpu_memory_buffer_manager = GetGpuMemoryBufferManager();
   callback.Run(base::MakeUnique<viz::ClientLayerTreeFrameSink>(
       std::move(context_provider), std::move(worker_context_provider),
-      GetGpuMemoryBufferManager(), nullptr,
-      std::move(synthetic_begin_frame_source), std::move(sink_info),
-      std::move(client_request), nullptr /* hit_test_data_provider */,
-      base::MakeUnique<RendererLocalSurfaceIdProvider>(),
-      enable_surface_synchronization));
+      &params));
 }
 
 AssociatedInterfaceRegistry*
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index afe5698..012838c 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -827,17 +827,17 @@
   }
   if (is_posix && !is_android) {
     data_deps += [
-      "//third_party/breakpad:dump_syms($host_toolchain)",
-      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+      "//breakpad:dump_syms($host_toolchain)",
+      "//breakpad:minidump_stackwalk($host_toolchain)",
     ]
   }
   if (is_android) {
     data_deps += [
-      "//third_party/breakpad:dump_syms",
-      "//third_party/breakpad:microdump_stackwalk",
-      "//third_party/breakpad:minidump_dump",
-      "//third_party/breakpad:minidump_stackwalk",
-      "//third_party/breakpad:symupload",
+      "//breakpad:dump_syms",
+      "//breakpad:microdump_stackwalk",
+      "//breakpad:minidump_dump",
+      "//breakpad:minidump_stackwalk",
+      "//breakpad:symupload",
       "//tools/android/forwarder2",
     ]
   }
diff --git a/docs/linux_crash_dumping.md b/docs/linux_crash_dumping.md
index 8bc0aa86..47533c9 100644
--- a/docs/linux_crash_dumping.md
+++ b/docs/linux_crash_dumping.md
@@ -11,8 +11,8 @@
 three platforms (Linux, Mac and Windows). For Linux, a substantial amount of
 work was required to support cross-process dumping. At the time of writing this
 code is currently forked from the upstream breakpad repo. While this situation
-remains, the forked code lives in `third_party/breakpad/linux`. The upstream
-repo is mirrored in `third_party/breakpad/breakpad`.
+remains, the forked code lives in `breakpad/linux`. The upstream repo is
+mirrored in `breakpad/src`.
 
 The code currently supports i386 only. Getting x86-64 to work should only be a
 minor amount of work.
@@ -22,13 +22,13 @@
 Breakpad deals in a file format called 'minidumps'. This is a Microsoft format
 and thus is defined by in-memory structures which are dumped, raw, to disk. The
 main header file for this file format is
-`third_party/breakpad/breakpad/src/google_breakpad/common/minidump_format.h`.
+`breakpad/src/google_breakpad/common/minidump_format.h`.
 
 At the top level, the minidump file format is a list of key-value pairs. Many of
 the keys are defined by the minidump format and contain cross-platform
 representations of stacks, threads etc. For Linux we also define a number of
 custom keys containing `/proc/cpuinfo`, `lsb-release` etc. These are defined in
-`third_party/breakpad/breakpad/linux/minidump_format_linux.h`.
+`breakpad/linux/minidump_format_linux.h`.
 
 ### Catching exceptions
 
diff --git a/ios/chrome/app/DEPS b/ios/chrome/app/DEPS
index 19695943..e35b827 100644
--- a/ios/chrome/app/DEPS
+++ b/ios/chrome/app/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+breakpad/src/client/ios",
   "+components/bookmarks/browser",
   "+components/bookmarks/test",
   "+components/browser_sync",
@@ -26,7 +27,6 @@
   "+ios/net",
   "+ios/public/provider/chrome",
   "+mojo/edk/embedder/embedder.h",
-  "+third_party/breakpad/breakpad/src/client/ios",
 
   # Strings and resources.
   "+components/grit",
diff --git a/ios/chrome/app/application_delegate/BUILD.gn b/ios/chrome/app/application_delegate/BUILD.gn
index f9f9ff8..47dccef 100644
--- a/ios/chrome/app/application_delegate/BUILD.gn
+++ b/ios/chrome/app/application_delegate/BUILD.gn
@@ -34,6 +34,7 @@
     ":test_support",
     "//base",
     "//base/test:test_support",
+    "//breakpad:client",
     "//components/handoff",
     "//components/metrics",
     "//ios/chrome/app",
@@ -64,7 +65,6 @@
     "//ios/web/public/test",
     "//net:test_support",
     "//testing/gtest",
-    "//third_party/breakpad:client",
     "//third_party/ocmock",
     "//ui/base",
     "//url",
diff --git a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
index a010802..8c03bd4c 100644
--- a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
+++ b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
@@ -8,6 +8,7 @@
 #import <Foundation/Foundation.h>
 
 #include "base/mac/scoped_block.h"
+#import "breakpad/src/client/ios/BreakpadController.h"
 #include "components/metrics/metrics_service.h"
 #import "ios/chrome/app/application_delegate/startup_information.h"
 #include "ios/chrome/browser/application_context.h"
@@ -19,7 +20,6 @@
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "net/base/network_change_notifier.h"
 #include "testing/platform_test.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS
index 3adadcc..7ed4da5 100644
--- a/ios/chrome/browser/DEPS
+++ b/ios/chrome/browser/DEPS
@@ -1,4 +1,6 @@
 include_rules = [
+  "+breakpad/src/client/ios",
+  "+breakpad/src/common",
   "+components/about_handler",
   "+components/autofill/core/browser",
   "+components/autofill/core/common",
@@ -103,8 +105,6 @@
   "+net",
   "+rlz/features",
   "+services/metrics",
-  "+third_party/breakpad/breakpad/src/client/ios",
-  "+third_party/breakpad/breakpad/src/common",
   "+third_party/brotli",
   "+third_party/google_toolbox_for_mac",
   "+third_party/libaddressinput",
diff --git a/ios/chrome/browser/crash_report/BUILD.gn b/ios/chrome/browser/crash_report/BUILD.gn
index 1b3c3752..2c295328 100644
--- a/ios/chrome/browser/crash_report/BUILD.gn
+++ b/ios/chrome/browser/crash_report/BUILD.gn
@@ -22,11 +22,11 @@
 
   deps = [
     "//base",
+    "//breakpad:client",
     "//components/crash/core/common",
     "//components/upload_list",
     "//ios/chrome/browser",
     "//ios/web",
-    "//third_party/breakpad:client",
   ]
 }
 
@@ -70,6 +70,7 @@
     ":crash_report",
     ":crash_report_internal",
     "//base",
+    "//breakpad:client",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/sessions:serialisation",
@@ -78,7 +79,6 @@
     "//ios/web/public/test",
     "//testing/gmock",
     "//testing/gtest",
-    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
 }
diff --git a/ios/chrome/browser/crash_report/breakpad_helper.mm b/ios/chrome/browser/crash_report/breakpad_helper.mm
index df3af19..ce51472 100644
--- a/ios/chrome/browser/crash_report/breakpad_helper.mm
+++ b/ios/chrome/browser/crash_report/breakpad_helper.mm
@@ -22,9 +22,9 @@
 #import "ios/chrome/browser/crash_report/crash_report_user_application_state.h"
 
 // TODO(stuartmorgan): Move this up where it belongs once
-// https://crbug.com/google-breakpad/487 is fixed. For now, put it at the end to
-// avoid compiler errors.
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
+// http://code.google.com/p/google-breakpad/issues/detail?id=487
+// is fixed. For now, put it at the end to avoid compiler errors.
+#import "breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm b/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
index 7fd3766..c2f17ec 100644
--- a/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
+++ b/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#import "breakpad/src/client/ios/BreakpadController.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
 #import "ios/chrome/test/base/scoped_block_swizzler.h"
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/browser/crash_report/crash_report_background_uploader.mm b/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
index 9258c76..19525ab4 100644
--- a/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
+++ b/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
@@ -13,8 +13,8 @@
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/time/time.h"
+#import "breakpad/src/client/ios/BreakpadController.h"
 #include "ios/chrome/browser/experimental_flags.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/passwords/BUILD.gn b/ios/chrome/browser/passwords/BUILD.gn
index 8ee80da1..9ace7590 100644
--- a/ios/chrome/browser/passwords/BUILD.gn
+++ b/ios/chrome/browser/passwords/BUILD.gn
@@ -72,10 +72,6 @@
     "//ios/chrome/browser/autofill",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/infobars",
-
-    # TODO(crbug.com/435048): Remove payments dependency after landing
-    # https://chromium-review.googlesource.com/c/chromium/src/+/631881.
-    "//ios/chrome/browser/payments",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/ssl",
     "//ios/chrome/browser/sync/glue",
diff --git a/ios/chrome/browser/passwords/credential_manager_util.mm b/ios/chrome/browser/passwords/credential_manager_util.mm
index 6a0c1fc..35ff6b2 100644
--- a/ios/chrome/browser/passwords/credential_manager_util.mm
+++ b/ios/chrome/browser/passwords/credential_manager_util.mm
@@ -5,7 +5,6 @@
 #include "ios/chrome/browser/passwords/credential_manager_util.h"
 
 #include "components/security_state/core/security_state.h"
-#include "ios/chrome/browser/payments/origin_security_checker.h"
 #include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
 #import "ios/web/public/origin_util.h"
 #include "url/origin.h"
@@ -15,11 +14,6 @@
 using password_manager::CredentialType;
 using password_manager::CredentialMediationRequirement;
 
-// TODO(crbug.com/435048): This file should not depend on payments. As soon as
-// https://chromium-review.googlesource.com/c/chromium/src/+/631881 is landed
-// make sure there are no payments dependencies.
-using payments::OriginSecurityChecker;
-
 namespace {
 
 security_state::SecurityLevel GetSecurityLevelForWebState(
@@ -205,18 +199,19 @@
 
   const GURL last_committed_url = web_state->GetLastCommittedURL();
 
-  if (!OriginSecurityChecker::IsContextSecure(last_committed_url)) {
+  if (!web::IsOriginSecure(last_committed_url) ||
+      last_committed_url.scheme() == url::kDataScheme) {
     return false;
   }
 
   // If scheme is not cryptographic, the origin must be either localhost or a
   // file.
-  if (!OriginSecurityChecker::IsSchemeCryptographic(last_committed_url)) {
-    return OriginSecurityChecker::IsOriginLocalhostOrFile(last_committed_url);
+  if (!security_state::IsSchemeCryptographic(last_committed_url)) {
+    return security_state::IsOriginLocalhostOrFile(last_committed_url);
   }
 
   // If scheme is cryptographic, valid SSL certificate is required.
   security_state::SecurityLevel security_level =
       GetSecurityLevelForWebState(web_state);
-  return OriginSecurityChecker::IsSSLCertificateValid(security_level);
+  return security_state::IsSslCertificateValid(security_level);
 }
diff --git a/ios/chrome/browser/payments/BUILD.gn b/ios/chrome/browser/payments/BUILD.gn
index 84f2e85..9f6d2b6 100644
--- a/ios/chrome/browser/payments/BUILD.gn
+++ b/ios/chrome/browser/payments/BUILD.gn
@@ -19,8 +19,6 @@
     "ios_payment_instrument_launcher_factory.mm",
     "ios_payment_request_cache_factory.h",
     "ios_payment_request_cache_factory.mm",
-    "origin_security_checker.h",
-    "origin_security_checker.mm",
     "payment_request.h",
     "payment_request.mm",
     "payment_request_cache.h",
diff --git a/ios/chrome/browser/payments/origin_security_checker.h b/ios/chrome/browser/payments/origin_security_checker.h
deleted file mode 100644
index 161ff37..0000000
--- a/ios/chrome/browser/payments/origin_security_checker.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_PAYMENTS_ORIGIN_SECURITY_CHECKER_H_
-#define IOS_CHROME_BROWSER_PAYMENTS_ORIGIN_SECURITY_CHECKER_H_
-
-#include "base/macros.h"
-#include "components/security_state/core/security_state.h"
-
-class GURL;
-
-namespace payments {
-
-class OriginSecurityChecker {
- public:
-  // Returns true for a valid |url| from a secure context. This check is a
-  // superset of the OriginSecurityChecker::IsOriginSecure() by making sure
-  // the URL does not have a data URI scheme. This may eventually get more
-  // complicated and require looking at whether the origin is opaque, etc.
-  static bool IsContextSecure(const GURL& url);
-
-  // Returns true for a valid |url| from a secure origin.
-  static bool IsOriginSecure(const GURL& url);
-
-  // Returns true for a valid |url| with a cryptographic scheme, e.g., HTTPS,
-  // HTTPS-SO, WSS.
-  static bool IsSchemeCryptographic(const GURL& url);
-
-  // Returns true for a valid |url| with localhost or file:// scheme origin.
-  static bool IsOriginLocalhostOrFile(const GURL& url);
-
-  // Returns true if the page has a valid SSL certificate. Only EV_SECURE,
-  // SECURE, and SECURE_WITH_POLICY_INSTALLED_CERT are considered valid for web
-  // payments.
-  static bool IsSSLCertificateValid(
-      const security_state::SecurityLevel security_level);
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(OriginSecurityChecker);
-};
-
-}  // namespace payments
-
-#endif  // IOS_CHROME_BROWSER_PAYMENTS_ORIGIN_SECURITY_CHECKER_H_
diff --git a/ios/chrome/browser/payments/origin_security_checker.mm b/ios/chrome/browser/payments/origin_security_checker.mm
deleted file mode 100644
index cc13566..0000000
--- a/ios/chrome/browser/payments/origin_security_checker.mm
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/payments/origin_security_checker.h"
-
-#include <string>
-#include <vector>
-
-#include "base/stl_util.h"
-#import "ios/web/public/origin_util.h"
-#include "net/base/url_util.h"
-#include "url/gurl.h"
-#include "url/url_constants.h"
-
-namespace payments {
-
-// static
-bool OriginSecurityChecker::IsContextSecure(const GURL& url) {
-  return IsOriginSecure(url) &&
-         !base::ContainsValue(std::vector<std::string>{url::kDataScheme},
-                              url.scheme());
-}
-
-// static
-bool OriginSecurityChecker::IsOriginSecure(const GURL& url) {
-  return url.is_valid() && web::IsOriginSecure(url);
-}
-
-// static
-bool OriginSecurityChecker::IsSchemeCryptographic(const GURL& url) {
-  return url.is_valid() && url.SchemeIsCryptographic();
-}
-
-// static
-bool OriginSecurityChecker::IsOriginLocalhostOrFile(const GURL& url) {
-  return url.is_valid() &&
-         (net::IsLocalhost(url.HostNoBracketsPiece()) || url.SchemeIsFile());
-}
-
-// static
-bool OriginSecurityChecker::IsSSLCertificateValid(
-    const security_state::SecurityLevel security_level) {
-  return security_level == security_state::SECURE ||
-         security_level == security_state::EV_SECURE ||
-         security_level == security_state::SECURE_WITH_POLICY_INSTALLED_CERT;
-}
-
-}  // namespace payments
diff --git a/ios/chrome/browser/ui/payments/payment_request_manager.mm b/ios/chrome/browser/ui/payments/payment_request_manager.mm
index 2e9f3db..17c091c 100644
--- a/ios/chrome/browser/ui/payments/payment_request_manager.mm
+++ b/ios/chrome/browser/ui/payments/payment_request_manager.mm
@@ -46,7 +46,6 @@
 #include "ios/chrome/browser/payments/ios_payment_instrument_launcher.h"
 #include "ios/chrome/browser/payments/ios_payment_instrument_launcher_factory.h"
 #include "ios/chrome/browser/payments/ios_payment_request_cache_factory.h"
-#include "ios/chrome/browser/payments/origin_security_checker.h"
 #include "ios/chrome/browser/payments/payment_request.h"
 #import "ios/chrome/browser/payments/payment_request_cache.h"
 #import "ios/chrome/browser/payments/payment_response_helper.h"
@@ -911,23 +910,21 @@
 
   const GURL lastCommittedURL = _activeWebState->GetLastCommittedURL();
 
-  if (!payments::OriginSecurityChecker::IsContextSecure(lastCommittedURL)) {
-    LOG(ERROR) << "Not in a secure context.";
+  if (!web::IsOriginSecure(lastCommittedURL) ||
+      lastCommittedURL.scheme() == url::kDataScheme) {
+    DLOG(ERROR) << "Not in a secure context.";
     return NO;
   }
 
-  if (!payments::OriginSecurityChecker::IsSchemeCryptographic(
-          lastCommittedURL) &&
-      !payments::OriginSecurityChecker::IsOriginLocalhostOrFile(
-          lastCommittedURL)) {
-    LOG(ERROR) << "Not localhost, or with file or cryptographic scheme.";
+  if (!security_state::IsSchemeCryptographic(lastCommittedURL) &&
+      !security_state::IsOriginLocalhostOrFile(lastCommittedURL)) {
+    DLOG(ERROR) << "Not localhost, or with file or cryptographic scheme.";
     return NO;
   }
 
   // If the scheme is cryptographic, the SSL certificate must also be valid.
-  return !payments::OriginSecurityChecker::IsSchemeCryptographic(
-             lastCommittedURL) ||
-         payments::OriginSecurityChecker::IsSSLCertificateValid(
+  return !security_state::IsSchemeCryptographic(lastCommittedURL) ||
+         security_state::IsSslCertificateValid(
              _toolbarModel->GetToolbarModel()->GetSecurityLevel(true));
 }
 
@@ -1117,8 +1114,10 @@
 
   // Set the JS isContextSecure global variable at the earliest opportunity.
   [_paymentRequestJsManager
-       setContextSecure:payments::OriginSecurityChecker::IsContextSecure(
-                            _activeWebState->GetLastCommittedURL())
+       setContextSecure:(web::IsOriginSecure(
+                             _activeWebState->GetLastCommittedURL()) &&
+                         _activeWebState->GetLastCommittedURL().scheme() !=
+                             url::kDataScheme)
       completionHandler:nil];
 }
 
diff --git a/ios/chrome/browser/ui/safe_mode/BUILD.gn b/ios/chrome/browser/ui/safe_mode/BUILD.gn
index e95e853..5e36aed 100644
--- a/ios/chrome/browser/ui/safe_mode/BUILD.gn
+++ b/ios/chrome/browser/ui/safe_mode/BUILD.gn
@@ -55,11 +55,11 @@
   deps = [
     ":safe_mode",
     "//base",
+    "//breakpad:client",
     "//ios/chrome/browser/crash_report",
     "//ios/chrome/test/base",
     "//ios/chrome/test/ocmock",
     "//testing/gtest",
-    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
   libs = [ "UIKit.framework" ]
diff --git a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
index 335cceb..1f16ee7f 100644
--- a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 #import "ios/chrome/browser/ui/safe_mode/safe_mode_view_controller.h"
+#import "breakpad/src/client/ios/BreakpadController.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
 #import "ios/chrome/test/base/scoped_block_swizzler.h"
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/test/DEPS b/ios/chrome/test/DEPS
index 77affed59..651885c3 100644
--- a/ios/chrome/test/DEPS
+++ b/ios/chrome/test/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+breakpad/src/client/ios",
   "+components/autofill/core/browser",
   "+components/bookmarks",
   "+components/browser_sync",
@@ -20,7 +21,6 @@
   "+ios/public/provider/chrome",
   "+ios/public/test",
   "+net/url_request",
-  "+third_party/breakpad/breakpad/src/client/ios",
   "+third_party/google_toolbox_for_mac",
   "+ui",
 
diff --git a/ios/chrome/test/app/BUILD.gn b/ios/chrome/test/app/BUILD.gn
index 69651ea..9420398b 100644
--- a/ios/chrome/test/app/BUILD.gn
+++ b/ios/chrome/test/app/BUILD.gn
@@ -36,6 +36,7 @@
   deps = [
     "//base",
     "//base/test:test_support",
+    "//breakpad:client",
     "//components/autofill/core/browser",
     "//components/bookmarks/browser",
     "//components/browser_sync",
@@ -86,7 +87,6 @@
     "//ios/web/public/test",
     "//net",
     "//net:test_support",
-    "//third_party/breakpad:client",
     "//url",
   ]
 }
diff --git a/ios/chrome/test/app/chrome_test_util.mm b/ios/chrome/test/app/chrome_test_util.mm
index 1c44cbe..f8d85a5 100644
--- a/ios/chrome/test/app/chrome_test_util.mm
+++ b/ios/chrome/test/app/chrome_test_util.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/test/app/chrome_test_util.h"
 
 #include "base/mac/foundation_util.h"
+#import "breakpad/src/client/ios/BreakpadController.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
 #import "ios/chrome/app/application_delegate/metrics_mediator.h"
@@ -27,7 +28,6 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher.h"
 #import "ios/web/public/test/native_controller_test_util.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/test/ocmock/BUILD.gn b/ios/chrome/test/ocmock/BUILD.gn
index ed27b7c..cc3ebdf3 100644
--- a/ios/chrome/test/ocmock/BUILD.gn
+++ b/ios/chrome/test/ocmock/BUILD.gn
@@ -11,8 +11,8 @@
   ]
   deps = [
     "//base",
+    "//breakpad:client",
     "//testing/gtest",
-    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
 }
diff --git a/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm b/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
index 6a9be75..ba86516 100644
--- a/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
+++ b/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
@@ -4,8 +4,8 @@
 
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 
+#import "breakpad/src/client/ios/BreakpadController.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/clean/chrome/app/DEPS b/ios/clean/chrome/app/DEPS
index d893f68..3338758 100644
--- a/ios/clean/chrome/app/DEPS
+++ b/ios/clean/chrome/app/DEPS
@@ -1,9 +1,9 @@
 include_rules = [
+  "+breakpad/src/client/ios",
   "+components/content_settings",
   "+components/crash/core/common",
   "+ios/chrome/browser",
   "+ios/net",
   "+ios/public/provider/chrome",
   "+ios/web/public",
-  "+third_party/breakpad/breakpad/src/client/ios",
 ]
diff --git a/ios/clean/chrome/app/steps/BUILD.gn b/ios/clean/chrome/app/steps/BUILD.gn
index 92053f05..351dbdff 100644
--- a/ios/clean/chrome/app/steps/BUILD.gn
+++ b/ios/clean/chrome/app/steps/BUILD.gn
@@ -50,6 +50,7 @@
   deps = [
     ":step_runner",
     "//base",
+    "//breakpad:client",
     "//components/content_settings/core/browser",
     "//ios/chrome/app:app_internal",
     "//ios/chrome/app/startup",
@@ -68,7 +69,6 @@
     "//ios/clean/chrome/browser/ui/root",
     "//ios/net",
     "//ios/web",
-    "//third_party/breakpad:client",
   ]
 }
 
diff --git a/ios/clean/chrome/app/steps/breakpad_initializer.mm b/ios/clean/chrome/app/steps/breakpad_initializer.mm
index bfb5f2a..3590f55 100644
--- a/ios/clean/chrome/app/steps/breakpad_initializer.mm
+++ b/ios/clean/chrome/app/steps/breakpad_initializer.mm
@@ -5,10 +5,10 @@
 #import "ios/clean/chrome/app/steps/breakpad_initializer.h"
 
 #include "base/logging.h"
+#import "breakpad/src/client/ios/BreakpadController.h"
 #include "ios/chrome/browser/application_context.h"
 #import "ios/clean/chrome/app/steps/step_context.h"
 #import "ios/clean/chrome/app/steps/step_features.h"
-#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/native_client_sdk/src/BUILD.gn b/native_client_sdk/src/BUILD.gn
index 5c9fa1215..9b33bed5 100644
--- a/native_client_sdk/src/BUILD.gn
+++ b/native_client_sdk/src/BUILD.gn
@@ -56,9 +56,9 @@
     # http://crbug.com/245456
     if (!is_win && target_cpu == "x64") {
       deps += [
-        "//third_party/breakpad:dump_syms($host_toolchain)",
-        "//third_party/breakpad:minidump_dump($host_toolchain)",
-        "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+        "//breakpad:dump_syms($host_toolchain)",
+        "//breakpad:minidump_dump($host_toolchain)",
+        "//breakpad:minidump_stackwalk($host_toolchain)",
       ]
     }
   }
diff --git a/net/cert/ct_policy_enforcer.cc b/net/cert/ct_policy_enforcer.cc
index 0dd6a0d..fa312675 100644
--- a/net/cert/ct_policy_enforcer.cc
+++ b/net/cert/ct_policy_enforcer.cc
@@ -61,6 +61,7 @@
   if (end < start) {
     *rounded_months_difference = 0;
     *has_partial_month = false;
+    return;
   }
 
   *has_partial_month = true;
diff --git a/net/cert/ct_policy_enforcer_unittest.cc b/net/cert/ct_policy_enforcer_unittest.cc
index 46942a8..81421e7 100644
--- a/net/cert/ct_policy_enforcer_unittest.cc
+++ b/net/cert/ct_policy_enforcer_unittest.cc
@@ -405,7 +405,9 @@
     base::Time validity_start;
     base::Time validity_end;
     size_t scts_required;
-  } kTestData[] = {{// Cert valid for 14 months, needs 2 SCTs.
+  } kTestData[] = {{// Cert valid for -14 months (nonsensical), needs 2 SCTs.
+                    time_2016_6_0_6_11_25_0_0, time_2015_3_0_25_11_25_0_0, 2},
+                   {// Cert valid for 14 months, needs 2 SCTs.
                     time_2015_3_0_25_11_25_0_0, time_2016_6_0_6_11_25_0_0, 2},
                    {// Cert valid for exactly 15 months, needs 3 SCTs.
                     time_2015_3_0_25_11_25_0_0, time_2016_6_0_25_11_25_0_0, 3},
diff --git a/remoting/base/BUILD.gn b/remoting/base/BUILD.gn
index 3cc1e9b..7f5a8b9e 100644
--- a/remoting/base/BUILD.gn
+++ b/remoting/base/BUILD.gn
@@ -118,9 +118,9 @@
   ]
 
   if (is_mac) {
-    deps += [ "//third_party/breakpad" ]
+    deps += [ "//breakpad" ]
   } else if (is_win) {
-    deps += [ "//third_party/breakpad:breakpad_handler" ]
+    deps += [ "//breakpad:breakpad_handler" ]
   }
 }
 
@@ -178,7 +178,7 @@
   ]
 
   if (is_win || is_mac || is_chromeos) {
-    deps += [ "//third_party/breakpad:client" ]
+    deps += [ "//breakpad:client" ]
   }
 
   if (is_win) {
diff --git a/remoting/base/DEPS b/remoting/base/DEPS
index 54b8b42c..ecd7993 100644
--- a/remoting/base/DEPS
+++ b/remoting/base/DEPS
@@ -1,9 +1,9 @@
 include_rules = [
+  "+breakpad",
   "+google/protobuf",
   "+google_apis",
   "+mojo/edk/embedder",
   "+net",
-  "+third_party/breakpad",
   "+third_party/zlib",
   "+ui/base",
 ]
diff --git a/remoting/base/breakpad_mac.mm b/remoting/base/breakpad_mac.mm
index 3cd6ef3..1dbd11f 100644
--- a/remoting/base/breakpad_mac.mm
+++ b/remoting/base/breakpad_mac.mm
@@ -8,7 +8,7 @@
 
 #include "base/logging.h"
 #import "base/mac/scoped_nsautorelease_pool.h"
-#import "third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h"
+#import "breakpad/src/client/mac/Framework/Breakpad.h"
 
 namespace remoting {
 
diff --git a/remoting/base/breakpad_win.cc b/remoting/base/breakpad_win.cc
index bc11449..58d95c3 100644
--- a/remoting/base/breakpad_win.cc
+++ b/remoting/base/breakpad_win.cc
@@ -22,7 +22,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/current_module.h"
 #include "base/win/wrapped_window_proc.h"
-#include "third_party/breakpad/breakpad/src/client/windows/handler/exception_handler.h"
+#include "breakpad/src/client/windows/handler/exception_handler.h"
 
 namespace remoting {
 void InitializeCrashReportingForTest(const wchar_t* pipe_name);
diff --git a/remoting/base/breakpad_win_unittest.cc b/remoting/base/breakpad_win_unittest.cc
index b6ad481..38c368b30 100644
--- a/remoting/base/breakpad_win_unittest.cc
+++ b/remoting/base/breakpad_win_unittest.cc
@@ -12,10 +12,10 @@
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "breakpad/src/client/windows/crash_generation/client_info.h"
+#include "breakpad/src/client/windows/crash_generation/crash_generation_server.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/client_info.h"
-#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/crash_generation_server.h"
 
 namespace {
 
diff --git a/remoting/scripts/mac/dump_product_syms b/remoting/scripts/mac/dump_product_syms
index f73a16a0..7c53948 100755
--- a/remoting/scripts/mac/dump_product_syms
+++ b/remoting/scripts/mac/dump_product_syms
@@ -28,7 +28,8 @@
 
 for ARCH in ${ARCHS}; do
   # Use -c to avoid dumping CFI, because the Breakpad stackwalk is incompatible
-  # with CFI produced by clang. https://crbug.com/google-breakpad/443
+  # with CFI produced by clang.
+  # http://code.google.com/p/google-breakpad/issues/detail?id=443
   "${DUMP_SYMS_TOOL}" -a "${ARCH}" -c "${DWARF_PATH}" > \
       "${SOURCE_BUNDLE}-${VERSION}-${ARCH}.breakpad"
 done
diff --git a/storage/browser/fileapi/quota/quota_backend_impl_unittest.cc b/storage/browser/fileapi/quota/quota_backend_impl_unittest.cc
index 4a83517..78e05df 100644
--- a/storage/browser/fileapi/quota/quota_backend_impl_unittest.cc
+++ b/storage/browser/fileapi/quota/quota_backend_impl_unittest.cc
@@ -18,7 +18,8 @@
 #include "storage/browser/fileapi/obfuscated_file_util.h"
 #include "storage/browser/quota/quota_manager_proxy.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
+#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 using storage::FileSystemUsageCache;
 using storage::ObfuscatedFileUtil;
@@ -101,7 +102,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
-    in_memory_env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default()));
+    in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
     file_util_.reset(ObfuscatedFileUtil::CreateForTesting(
         NULL, data_dir_.GetPath(), in_memory_env_.get(), file_task_runner()));
     backend_.reset(new QuotaBackendImpl(file_task_runner(), file_util_.get(),
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 516c104..1d66062 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -205,7 +205,7 @@
     "type": "console_test_launcher",
   },
   "breakpad_unittests": {
-    "label": "//third_party/breakpad:breakpad_unittests",
+    "label": "//breakpad:breakpad_unittests",
     "type": "console_test_launcher",
   },
   "browser_tests": {
@@ -458,7 +458,7 @@
     "type": "console_test_launcher",
   },
   "dump_syms" : {
-    "label": "//third_party/breakpad:dump_syms",
+    "label": "//breakpad:dump_syms",
     "type": "additional_compile_target",
   },
   "events_unittests": {
@@ -724,7 +724,7 @@
     ],
   },
   "microdump_stackwalk" : {
-    "label": "//third_party/breakpad:microdump_stackwalk",
+    "label": "//breakpad:microdump_stackwalk",
     "type": "additional_compile_target",
   },
   "midi_unittests": {
diff --git a/third_party/.gitignore b/third_party/.gitignore
index b6b1f611..e28b33b1 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -29,7 +29,6 @@
 /bison
 /boringssl/src
 /bouncycastle/lib/*.jar
-/breakpad/breakpad
 /byte_buddy/lib/*.jar
 /cacheinvalidation/cacheinvalidation_unittests_run.xml
 /cardboard-java/src
diff --git a/third_party/WebKit/LayoutTests/css-parser/unclosed-open-brackets-crash.html b/third_party/WebKit/LayoutTests/css-parser/unclosed-open-brackets-crash.html
new file mode 100644
index 0000000..d57ccbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css-parser/unclosed-open-brackets-crash.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script>
+test(() => {
+    document.documentElement.style = 'content: ' + '('.repeat(60000) + '";';
+}, 'This test passes if it does not crash.');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index 2a9bce1d..f51e020c 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -297597,7 +297597,7 @@
    "support"
   ],
   "webrtc/RTCPeerConnection-getStats.html": [
-   "ca9ba3d9e1ce7d156c263bb20b7a05800a4c233a",
+   "1fc0c03ebd989d77c9d721b027a12a0cbbf24d53",
    "testharness"
   ],
   "webrtc/RTCPeerConnection-getTransceivers-expected.txt": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.html
index 4124963ae..a4df563 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-getStats.html
@@ -109,7 +109,7 @@
       const transceiver2 = pc.addTransceiver(track);
 
       assert_not_equals(transceiver1, transceiver2);
-      assert_not_equals(transciever1.sender, transceiver2.sender);
+      assert_not_equals(transceiver1.sender, transceiver2.sender);
       assert_equals(transceiver1.sender.track, transceiver2.sender.track);
 
       return promise_rejects(t, 'InvalidAccessError', pc.getStats(track));
@@ -125,7 +125,7 @@
     const transceiver2 = pc.addTransceiver(transceiver1.receiver.track);
     assert_equals(transceiver1.receiver.track, transceiver2.sender.track);
 
-    return promise_rejects(t, 'InvalidAccessError', pc.getStats(track));
+    return promise_rejects(t, 'InvalidAccessError', pc.getStats(transceiver1.receiver.track));
   }, 'getStats() with track associated with both sender and receiver should reject with InvalidAccessError');
 
   /*
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/international/rtl-negative-letter-spacing-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/text/international/rtl-negative-letter-spacing-expected.png
index c1d26824..b122c68 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/text/international/rtl-negative-letter-spacing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/international/rtl-negative-letter-spacing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-negative-letter-spacing-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-negative-letter-spacing-expected.png
index 9bab65e6..a01fa405 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-negative-letter-spacing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/text/international/rtl-negative-letter-spacing-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn
index c19648e..500eb67 100644
--- a/third_party/WebKit/Source/core/BUILD.gn
+++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -1391,6 +1391,7 @@
     "dom/DOMImplementationTest.cpp",
     "dom/DocumentStatisticsCollectorTest.cpp",
     "dom/DocumentTest.cpp",
+    "dom/DynamicModuleResolverTest.cpp",
     "dom/ElementTest.cpp",
     "dom/ElementVisibilityObserverTest.cpp",
     "dom/FirstLetterPseudoElementTest.cpp",
diff --git a/third_party/WebKit/Source/core/animation/SampledEffect.cpp b/third_party/WebKit/Source/core/animation/SampledEffect.cpp
index b6e30133..09df631 100644
--- a/third_party/WebKit/Source/core/animation/SampledEffect.cpp
+++ b/third_party/WebKit/Source/core/animation/SampledEffect.cpp
@@ -25,7 +25,7 @@
   size_t new_size = 0;
   for (auto& interpolation : interpolations_) {
     if (!replaced_properties.Contains(interpolation->GetProperty()))
-      interpolations_[new_size++].Swap(interpolation);
+      interpolations_[new_size++].swap(interpolation);
   }
   interpolations_.Shrink(new_size);
 }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp
index 367fe981..f47c2d94 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp
@@ -26,57 +26,58 @@
 
 bool ClassifyBlock(CSSParserTokenRange range,
                    bool& has_references,
-                   bool& has_at_apply_rule,
-                   bool is_top_level_block = true) {
+                   bool& has_at_apply_rule) {
+  size_t block_stack_size = 0;
+
   while (!range.AtEnd()) {
-    if (range.Peek().GetBlockType() == CSSParserToken::kBlockStart) {
-      const CSSParserToken& token = range.Peek();
-      CSSParserTokenRange block = range.ConsumeBlock();
-      if (token.FunctionId() == CSSValueVar) {
-        if (!IsValidVariableReference(block, has_at_apply_rule))
-          return false;  // Bail if any references are invalid
-        has_references = true;
-        continue;
-      }
-      if (!ClassifyBlock(block, has_references, has_at_apply_rule, false))
-        return false;
-      continue;
+    // First check if this is a valid variable reference, then handle the next
+    // token accordingly.
+    if (range.Peek().GetBlockType() == CSSParserToken::kBlockStart &&
+        range.Peek().FunctionId() == CSSValueVar) {
+      CSSParserTokenRange copy = range;
+      if (!IsValidVariableReference(copy.ConsumeBlock(), has_at_apply_rule))
+        return false;  // Bail if any references are invalid
+      has_references = true;
     }
 
-    DCHECK_NE(range.Peek().GetBlockType(), CSSParserToken::kBlockEnd);
-
     const CSSParserToken& token = range.Consume();
-    switch (token.GetType()) {
-      case kAtKeywordToken: {
-        if (EqualIgnoringASCIICase(token.Value(), "apply")) {
-          range.ConsumeWhitespace();
-          const CSSParserToken& variable_name =
-              range.ConsumeIncludingWhitespace();
-          if (!CSSVariableParser::IsValidVariableName(variable_name) ||
-              !(range.AtEnd() || range.Peek().GetType() == kSemicolonToken ||
-                range.Peek().GetType() == kRightBraceToken))
-            return false;
-          has_at_apply_rule = true;
+    if (token.GetBlockType() == CSSParserToken::kBlockStart) {
+      ++block_stack_size;
+    } else if (token.GetBlockType() == CSSParserToken::kBlockEnd) {
+      --block_stack_size;
+    } else {
+      switch (token.GetType()) {
+        case kAtKeywordToken: {
+          if (EqualIgnoringASCIICase(token.Value(), "apply")) {
+            range.ConsumeWhitespace();
+            const CSSParserToken& variable_name =
+                range.ConsumeIncludingWhitespace();
+            if (!CSSVariableParser::IsValidVariableName(variable_name) ||
+                !(range.AtEnd() || range.Peek().GetType() == kSemicolonToken ||
+                  range.Peek().GetType() == kRightBraceToken))
+              return false;
+            has_at_apply_rule = true;
+          }
+          break;
         }
-        break;
-      }
-      case kDelimiterToken: {
-        if (token.Delimiter() == '!' && is_top_level_block)
+        case kDelimiterToken: {
+          if (token.Delimiter() == '!' && block_stack_size == 0)
+            return false;
+          break;
+        }
+        case kRightParenthesisToken:
+        case kRightBraceToken:
+        case kRightBracketToken:
+        case kBadStringToken:
+        case kBadUrlToken:
           return false;
-        break;
+        case kSemicolonToken:
+          if (block_stack_size == 0)
+            return false;
+          break;
+        default:
+          break;
       }
-      case kRightParenthesisToken:
-      case kRightBraceToken:
-      case kRightBracketToken:
-      case kBadStringToken:
-      case kBadUrlToken:
-        return false;
-      case kSemicolonToken:
-        if (is_top_level_block)
-          return false;
-        break;
-      default:
-        break;
     }
   }
   return true;
diff --git a/third_party/WebKit/Source/core/dom/BUILD.gn b/third_party/WebKit/Source/core/dom/BUILD.gn
index 3ff9d70c..eca84a2 100644
--- a/third_party/WebKit/Source/core/dom/BUILD.gn
+++ b/third_party/WebKit/Source/core/dom/BUILD.gn
@@ -104,6 +104,8 @@
     "DocumentType.h",
     "DocumentWriteIntervention.cpp",
     "DocumentWriteIntervention.h",
+    "DynamicModuleResolver.cpp",
+    "DynamicModuleResolver.h",
     "Element.cpp",
     "Element.h",
     "ElementData.cpp",
diff --git a/third_party/WebKit/Source/core/dom/DynamicModuleResolver.cpp b/third_party/WebKit/Source/core/dom/DynamicModuleResolver.cpp
new file mode 100644
index 0000000..8176720
--- /dev/null
+++ b/third_party/WebKit/Source/core/dom/DynamicModuleResolver.cpp
@@ -0,0 +1,209 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/dom/DynamicModuleResolver.h"
+
+#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/ReferrerScriptInfo.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "core/dom/Modulator.h"
+#include "core/dom/ModuleScript.h"
+#include "core/loader/modulescript/ModuleScriptFetchRequest.h"
+#include "platform/bindings/V8ThrowException.h"
+#include "v8/include/v8.h"
+
+namespace blink {
+
+namespace {
+
+class DynamicImportTreeClient final : public ModuleTreeClient {
+ public:
+  static DynamicImportTreeClient* Create(
+      const KURL& url,
+      Modulator* modulator,
+      ScriptPromiseResolver* promise_resolver) {
+    return new DynamicImportTreeClient(url, modulator, promise_resolver);
+  }
+
+  DECLARE_TRACE();
+
+ private:
+  DynamicImportTreeClient(const KURL& url,
+                          Modulator* modulator,
+                          ScriptPromiseResolver* promise_resolver)
+      : url_(url), modulator_(modulator), promise_resolver_(promise_resolver) {}
+
+  // Implements ModuleTreeClient:
+  void NotifyModuleTreeLoadFinished(ModuleScript*) final;
+
+  const KURL url_;
+  const Member<Modulator> modulator_;
+  const Member<ScriptPromiseResolver> promise_resolver_;
+};
+
+void DynamicImportTreeClient::NotifyModuleTreeLoadFinished(
+    ModuleScript* module_script) {
+  // Implements steps 2.[5-8] of
+  // https://html.spec.whatwg.org/multipage/webappapis.html#hostimportmoduledynamically(referencingscriptormodule,-specifier,-promisecapability)
+
+  // [nospec] Abort the steps if the browsing context is discarded.
+  if (!modulator_->HasValidContext()) {
+    // The promise_resolver_ should have ::Detach()-ed at this point,
+    // so ::Reject() is not necessary.
+    return;
+  }
+
+  ScriptState* script_state = modulator_->GetScriptState();
+  ScriptState::Scope scope(script_state);
+  v8::Isolate* isolate = script_state->GetIsolate();
+
+  // Step 2.5. "If result is null, then:" [spec text]
+  if (!module_script) {
+    // Step 2.5.1. "Let completion be Completion { [[Type]]: throw, [[Value]]: a
+    // new TypeError, [[Target]]: empty }." [spec text]
+    v8::Local<v8::Value> error = V8ThrowException::CreateTypeError(
+        isolate,
+        "Failed to fetch dynamically imported module: " + url_.GetString());
+
+    // Step 2.5.2. "Perform FinishDynamicImport(referencingScriptOrModule,
+    // specifier, promiseCapability, completion)." [spec text]
+    promise_resolver_->Reject(error);
+
+    // Step 2.5.3. "Abort these steps."
+    return;
+  }
+
+  // Step 2.6. "Run the module script module script, with the rethrow errors
+  // boolean set to true." [spec text]
+  ScriptValue error =
+      modulator_->ExecuteModule(module_script, CaptureEvalErrorFlag::kCapture);
+
+  // Step 2.7. "If running the module script throws an exception, ..." [spec
+  // text]
+  if (!error.IsEmpty()) {
+    // "... then perform FinishDynamicImport(referencingScriptOrModule,
+    // specifier, promiseCapability, the thrown exception completion)."
+    // [spec text]
+    // Note: "the thrown exception completion" is |error|.
+    // https://tc39.github.io/proposal-dynamic-import/#sec-finishdynamicimport
+    // Step 1. "If completion is an abrupt completion, then perform !
+    // Call(promiseCapability.[[Reject]], undefined, << completion.[[Value]]
+    // >>)." [spec text]
+    promise_resolver_->Reject(error);
+    return;
+  }
+
+  // Step 2.8. "Otherwise, perform
+  // FinishDynamicImport(referencingScriptOrModule, specifier,
+  // promiseCapability, NormalCompletion(undefined))." [spec text]
+  // https://tc39.github.io/proposal-dynamic-import/#sec-finishdynamicimport
+  // Step 2.a. "Assert: completion is a normal completion and
+  // completion.[[Value]] is undefined." [spec text]
+  DCHECK(error.IsEmpty());
+
+  // Step 2.b. "Let moduleRecord be
+  // !HostResolveImportedModule(referencingScriptOrModule, specifierString)."
+  // [spec text]
+  // Note: We skip invocation of ScriptModuleResolver here. The
+  // result of HostResolveImportedModule is guaranteed to be |module_script|.
+  ScriptModule record = module_script->Record();
+  DCHECK(!record.IsNull());
+
+  // Step 2.c. "Assert: ModuleEvaluation has already been invoked on
+  // moduleRecord and successfully completed." [spec text]
+  DCHECK_EQ(ScriptModuleState::kEvaluated, modulator_->GetRecordStatus(record));
+
+  // Step 2.d. "Let namespace be GetModuleNamespace(moduleRecord)." [spec text]
+  v8::Local<v8::Value> module_namespace = record.V8Namespace(isolate);
+
+  // Step 2.e. "If namespace is an abrupt completion, perform
+  // !Call(promiseCapability.[[Reject]], undefined, << namespace.[[Value]] >>)."
+  // [spec text]
+  // Note: Blink's implementation never allows |module_namespace| to be
+  // an abrupt completion.
+
+  // Step 2.f "Otherwise, perform ! Call(promiseCapability.[[Resolve]],
+  // undefined, << namespace.[[Value]] >>)." [spec text]
+  promise_resolver_->Resolve(module_namespace);
+}
+
+DEFINE_TRACE(DynamicImportTreeClient) {
+  visitor->Trace(modulator_);
+  visitor->Trace(promise_resolver_);
+  ModuleTreeClient::Trace(visitor);
+}
+
+}  // namespace
+
+DEFINE_TRACE(DynamicModuleResolver) {
+  visitor->Trace(modulator_);
+}
+
+void DynamicModuleResolver::ResolveDynamically(
+    const String& specifier,
+    const String& referrer_url_str,
+    const ReferrerScriptInfo& referrer_info,
+    ScriptPromiseResolver* promise_resolver) {
+  DCHECK(modulator_->GetScriptState()->GetIsolate()->InContext())
+      << "ResolveDynamically should be called from V8 callback, within a valid "
+         "context.";
+
+  // https://html.spec.whatwg.org/multipage/webappapis.html#hostimportmoduledynamically(referencingscriptormodule,-specifier,-promisecapability)
+  // Step 1. "Let referencing script be
+  // referencingScriptOrModule.[[HostDefined]]." [spec text]
+
+  // Step 2. "Run the following steps in parallel:"
+
+  // Step 2.1. "Let url be the result of resolving a module specifier
+  // given referencing script and specifier." [spec text]
+  KURL referrer_url = KURL(NullURL(), referrer_url_str);
+  DCHECK(referrer_url.IsValid());
+  KURL url = Modulator::ResolveModuleSpecifier(specifier, referrer_url);
+  if (!url.IsValid()) {
+    // Step 2.2.1. "If the result is failure, then:" [spec text]
+    // Step 2.2.2.1. "Let completion be Completion { [[Type]]: throw, [[Value]]:
+    // a new TypeError, [[Target]]: empty }." [spec text]
+    v8::Isolate* isolate = modulator_->GetScriptState()->GetIsolate();
+    v8::Local<v8::Value> error = V8ThrowException::CreateTypeError(
+        isolate, "Failed to resolve module specifier '" + specifier + "'");
+
+    // Step 2.2.2.2. "Perform FinishDynamicImport(referencingScriptOrModule,
+    // specifier, promiseCapability, completion)" [spec text]
+    // https://tc39.github.io/proposal-dynamic-import/#sec-finishdynamicimport
+    // Step 1. "If completion is an abrupt completion, then perform
+    // !Call(promiseCapability.[[Reject]], undefined, <<completion.[[Value]]>>).
+    // " [spec text]
+    promise_resolver->Reject(error);
+
+    // Step 2.2.2.3. "Abort these steps." [spec text]
+    return;
+  }
+
+  // Step 2.3. "Let options be the descendant script fetch options for
+  // referencing script's fetch options." [spec text]
+  // https://html.spec.whatwg.org/multipage/webappapis.html#descendant-script-fetch-options
+  // "For any given script fetch options options, the descendant script fetch
+  // options are a new script fetch options whose items all have the same
+  // values, except for the integrity metadata, which is instead the empty
+  // string." [spec text]
+  WebURLRequest::FetchCredentialsMode credentials_mode =
+      referrer_info.CredentialsMode();
+  const String& nonce = referrer_info.Nonce();
+  ParserDisposition parser_state = referrer_info.ParserState();
+  ModuleScriptFetchRequest request(url, nonce, parser_state, credentials_mode);
+
+  // Step 2.4. "Fetch a module script graph given url, settings object,
+  // "script", and options. Wait until the algorithm asynchronously completes
+  // with result."
+  auto tree_client =
+      DynamicImportTreeClient::Create(url, modulator_.Get(), promise_resolver);
+  modulator_->FetchTree(request, tree_client);
+
+  // Steps 2.[5-8] are implemented at
+  // DynamicImportTreeClient::NotifyModuleLoadFinished.
+
+  // Step 3. "Return undefined." [spec text]
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DynamicModuleResolver.h b/third_party/WebKit/Source/core/dom/DynamicModuleResolver.h
new file mode 100644
index 0000000..912a105
--- /dev/null
+++ b/third_party/WebKit/Source/core/dom/DynamicModuleResolver.h
@@ -0,0 +1,47 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef DynamicModuleResolver_h
+#define DynamicModuleResolver_h
+
+#include "core/CoreExport.h"
+#include "platform/heap/Handle.h"
+#include "platform/heap/Visitor.h"
+#include "platform/wtf/text/WTFString.h"
+
+namespace blink {
+
+class Modulator;
+class ReferrerScriptInfo;
+class ScriptPromiseResolver;
+
+// DynamicModuleResolver implements "Runtime Semantics:
+// HostImportModuleDynamically" per spec.
+// https://tc39.github.io/proposal-dynamic-import/#sec-hostimportmoduledynamically
+class CORE_EXPORT DynamicModuleResolver final
+    : public GarbageCollected<DynamicModuleResolver> {
+ public:
+  DECLARE_TRACE();
+
+  static DynamicModuleResolver* Create(Modulator* modulator) {
+    return new DynamicModuleResolver(modulator);
+  }
+
+  // Implements "HostImportModuleDynamically" semantics.
+  // Should be called w/ a valid V8 context.
+  void ResolveDynamically(const String& specifier,
+                          const String& referrer_url,
+                          const ReferrerScriptInfo& referrer_info,
+                          ScriptPromiseResolver*);
+
+ private:
+  explicit DynamicModuleResolver(Modulator* modulator)
+      : modulator_(modulator) {}
+
+  Member<Modulator> modulator_;
+};
+
+}  // namespace blink
+
+#endif  // DynamicModuleResolver_h
diff --git a/third_party/WebKit/Source/core/dom/DynamicModuleResolverTest.cpp b/third_party/WebKit/Source/core/dom/DynamicModuleResolverTest.cpp
new file mode 100644
index 0000000..c22b432a
--- /dev/null
+++ b/third_party/WebKit/Source/core/dom/DynamicModuleResolverTest.cpp
@@ -0,0 +1,304 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/dom/DynamicModuleResolver.h"
+
+#include "bindings/core/v8/ReferrerScriptInfo.h"
+#include "bindings/core/v8/ScriptFunction.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "bindings/core/v8/ScriptValue.h"
+#include "bindings/core/v8/V8BindingForCore.h"
+#include "bindings/core/v8/V8BindingForTesting.h"
+#include "core/dom/ModuleScript.h"
+#include "core/loader/modulescript/ModuleScriptFetchRequest.h"
+#include "core/testing/DummyModulator.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "v8/include/v8.h"
+
+namespace blink {
+
+namespace {
+
+constexpr const char* kTestReferrerURL = "https://example.com/referrer.js";
+constexpr const char* kTestDependencyURL = "https://example.com/dependency.js";
+
+class DynamicModuleResolverTestModulator final : public DummyModulator {
+ public:
+  explicit DynamicModuleResolverTestModulator(ScriptState* script_state)
+      : script_state_(script_state) {}
+  ~DynamicModuleResolverTestModulator() override = default;
+
+  void ResolveTreeFetch(ModuleScript* module_script) {
+    ASSERT_TRUE(pending_client_);
+    pending_client_->NotifyModuleTreeLoadFinished(module_script);
+    pending_client_ = nullptr;
+  }
+
+  DECLARE_TRACE();
+
+ private:
+  // Implements Modulator:
+  ScriptState* GetScriptState() final { return script_state_.Get(); }
+
+  ModuleScript* GetFetchedModuleScript(const KURL& url) final {
+    EXPECT_EQ(kTestReferrerURL, url.GetString());
+    ModuleScript* module_script = ModuleScript::CreateForTest(
+        this, ScriptModule(), url, "nonce", kParserInserted,
+        WebURLRequest::kFetchCredentialsModeOmit);
+    return module_script;
+  }
+
+  void FetchTree(const ModuleScriptFetchRequest& request,
+                 ModuleTreeClient* client) final {
+    EXPECT_EQ(kTestDependencyURL, request.Url().GetString());
+
+    pending_client_ = client;
+  }
+
+  ScriptValue ExecuteModule(const ModuleScript* module_script,
+                            CaptureEvalErrorFlag capture_error) final {
+    EXPECT_EQ(CaptureEvalErrorFlag::kCapture, capture_error);
+
+    ScriptState::Scope scope(script_state_.Get());
+    return module_script->Record().Evaluate(script_state_.Get(),
+                                            CaptureEvalErrorFlag::kCapture);
+  }
+
+  ScriptModuleState GetRecordStatus(ScriptModule script_module) final {
+    ScriptState::Scope scope(script_state_.Get());
+    return script_module.Status(script_state_.Get());
+  }
+
+  ScriptValue GetError(const ModuleScript* module_script) final {
+    ScriptState::Scope scope(script_state_.Get());
+    ScriptModule record = module_script->Record();
+    DCHECK(!record.IsNull());
+    return ScriptValue(script_state_.Get(),
+                       record.ErrorCompletion(script_state_.Get()));
+  }
+
+  RefPtr<ScriptState> script_state_;
+  Member<ModuleTreeClient> pending_client_;
+};
+
+DEFINE_TRACE(DynamicModuleResolverTestModulator) {
+  visitor->Trace(pending_client_);
+  DummyModulator::Trace(visitor);
+}
+
+// CaptureExportedStringFunction implements a javascript function
+// with a single argument of type module namespace.
+// CaptureExportedStringFunction captures the exported string value
+// from the module namespace as a blink::String, exposed via CapturedValue().
+class CaptureExportedStringFunction final : public ScriptFunction {
+ public:
+  CaptureExportedStringFunction(ScriptState* script_state,
+                                const String& export_name)
+      : ScriptFunction(script_state), export_name_(export_name) {}
+
+  v8::Local<v8::Function> Bind() { return BindToV8Function(); }
+  bool WasCalled() const { return was_called_; }
+  const String& CapturedValue() const { return captured_value_; }
+
+ private:
+  ScriptValue Call(ScriptValue value) override {
+    was_called_ = true;
+
+    v8::Isolate* isolate = GetScriptState()->GetIsolate();
+    v8::Local<v8::Context> context = GetScriptState()->GetContext();
+
+    v8::Local<v8::Object> module_namespace =
+        value.V8Value()->ToObject(context).ToLocalChecked();
+    v8::Local<v8::Value> exported_value =
+        module_namespace->Get(context, V8String(isolate, export_name_))
+            .ToLocalChecked();
+    captured_value_ = ToCoreString(exported_value->ToString());
+
+    return ScriptValue();
+  }
+
+  const String export_name_;
+  bool was_called_ = false;
+  String captured_value_;
+};
+
+// CaptureErrorFunction implements a javascript function which captures
+// name and error of the exception passed as its argument.
+class CaptureErrorFunction final : public ScriptFunction {
+ public:
+  explicit CaptureErrorFunction(ScriptState* script_state)
+      : ScriptFunction(script_state) {}
+
+  v8::Local<v8::Function> Bind() { return BindToV8Function(); }
+  bool WasCalled() const { return was_called_; }
+  const String& Name() const { return name_; }
+  const String& Message() const { return message_; }
+
+ private:
+  ScriptValue Call(ScriptValue value) override {
+    was_called_ = true;
+
+    v8::Isolate* isolate = GetScriptState()->GetIsolate();
+    v8::Local<v8::Context> context = GetScriptState()->GetContext();
+
+    v8::Local<v8::Object> error_object =
+        value.V8Value()->ToObject(context).ToLocalChecked();
+
+    v8::Local<v8::Value> name =
+        error_object->Get(context, V8String(isolate, "name")).ToLocalChecked();
+    name_ = ToCoreString(name->ToString());
+    v8::Local<v8::Value> message =
+        error_object->Get(context, V8String(isolate, "message"))
+            .ToLocalChecked();
+    message_ = ToCoreString(message->ToString());
+
+    return ScriptValue();
+  }
+
+  bool was_called_ = false;
+  String name_;
+  String message_;
+};
+
+class NotReached final : public ScriptFunction {
+ public:
+  static v8::Local<v8::Function> CreateFunction(ScriptState* script_state) {
+    auto not_reached = new NotReached(script_state);
+    return not_reached->BindToV8Function();
+  }
+
+ private:
+  explicit NotReached(ScriptState* script_state)
+      : ScriptFunction(script_state) {}
+
+  ScriptValue Call(ScriptValue) override {
+    ADD_FAILURE();
+    return ScriptValue();
+  }
+};
+
+}  // namespace
+
+TEST(DynamicModuleResolverTest, ResolveSuccess) {
+  V8TestingScope scope;
+  DynamicModuleResolverTestModulator* modulator =
+      new DynamicModuleResolverTestModulator(scope.GetScriptState());
+
+  auto promise_resolver = ScriptPromiseResolver::Create(scope.GetScriptState());
+  ScriptPromise promise = promise_resolver->Promise();
+
+  auto capture =
+      new CaptureExportedStringFunction(scope.GetScriptState(), "foo");
+  promise.Then(capture->Bind(),
+               NotReached::CreateFunction(scope.GetScriptState()));
+
+  auto resolver = DynamicModuleResolver::Create(modulator);
+  resolver->ResolveDynamically("./dependency.js", kTestReferrerURL,
+                               ReferrerScriptInfo(), promise_resolver);
+
+  v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
+  EXPECT_FALSE(capture->WasCalled());
+
+  KURL url(kParsedURLString, kTestDependencyURL);
+  ScriptModule record = ScriptModule::Compile(
+      scope.GetIsolate(), "export const foo = 'hello';", url.GetString(),
+      kSharableCrossOrigin, WebURLRequest::kFetchCredentialsModeOmit, "",
+      kParserInserted, TextPosition::MinimumPosition(), ASSERT_NO_EXCEPTION);
+  ModuleScript* module_script = ModuleScript::CreateForTest(
+      modulator, record, url, "nonce", kNotParserInserted,
+      WebURLRequest::kFetchCredentialsModeOmit);
+  record.Instantiate(scope.GetScriptState());
+  EXPECT_FALSE(module_script->IsErrored());
+  modulator->ResolveTreeFetch(module_script);
+
+  v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
+  EXPECT_TRUE(capture->WasCalled());
+  EXPECT_EQ("hello", capture->CapturedValue());
+}
+
+TEST(DynamicModuleResolverTest, ResolveSpecifierFailure) {
+  V8TestingScope scope;
+  auto modulator =
+      new DynamicModuleResolverTestModulator(scope.GetScriptState());
+
+  auto promise_resolver = ScriptPromiseResolver::Create(scope.GetScriptState());
+  ScriptPromise promise = promise_resolver->Promise();
+
+  auto capture = new CaptureErrorFunction(scope.GetScriptState());
+  promise.Then(NotReached::CreateFunction(scope.GetScriptState()),
+               capture->Bind());
+
+  auto resolver = DynamicModuleResolver::Create(modulator);
+  resolver->ResolveDynamically("invalid-specifier", kTestReferrerURL,
+                               ReferrerScriptInfo(), promise_resolver);
+
+  v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
+  EXPECT_TRUE(capture->WasCalled());
+  EXPECT_EQ("TypeError", capture->Name());
+  EXPECT_TRUE(capture->Message().StartsWith("Failed to resolve"));
+}
+
+TEST(DynamicModuleResolverTest, FetchFailure) {
+  V8TestingScope scope;
+  auto modulator =
+      new DynamicModuleResolverTestModulator(scope.GetScriptState());
+
+  auto promise_resolver = ScriptPromiseResolver::Create(scope.GetScriptState());
+  ScriptPromise promise = promise_resolver->Promise();
+
+  auto capture = new CaptureErrorFunction(scope.GetScriptState());
+  promise.Then(NotReached::CreateFunction(scope.GetScriptState()),
+               capture->Bind());
+
+  auto resolver = DynamicModuleResolver::Create(modulator);
+  resolver->ResolveDynamically("./dependency.js", kTestReferrerURL,
+                               ReferrerScriptInfo(), promise_resolver);
+
+  EXPECT_FALSE(capture->WasCalled());
+
+  modulator->ResolveTreeFetch(nullptr);
+
+  v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
+  EXPECT_TRUE(capture->WasCalled());
+  EXPECT_EQ("TypeError", capture->Name());
+  EXPECT_TRUE(capture->Message().StartsWith("Failed to fetch"));
+}
+
+TEST(DynamicModuleResolverTest, ExceptionThrown) {
+  V8TestingScope scope;
+  auto modulator =
+      new DynamicModuleResolverTestModulator(scope.GetScriptState());
+
+  auto promise_resolver = ScriptPromiseResolver::Create(scope.GetScriptState());
+  ScriptPromise promise = promise_resolver->Promise();
+
+  auto capture = new CaptureErrorFunction(scope.GetScriptState());
+  promise.Then(NotReached::CreateFunction(scope.GetScriptState()),
+               capture->Bind());
+
+  auto resolver = DynamicModuleResolver::Create(modulator);
+  resolver->ResolveDynamically("./dependency.js", kTestReferrerURL,
+                               ReferrerScriptInfo(), promise_resolver);
+
+  EXPECT_FALSE(capture->WasCalled());
+
+  KURL url(kParsedURLString, kTestDependencyURL);
+  ScriptModule record = ScriptModule::Compile(
+      scope.GetIsolate(), "throw Error('bar')", url.GetString(),
+      kSharableCrossOrigin, WebURLRequest::kFetchCredentialsModeOmit, "",
+      kParserInserted, TextPosition::MinimumPosition(), ASSERT_NO_EXCEPTION);
+  ModuleScript* module_script = ModuleScript::CreateForTest(
+      modulator, record, url, "nonce", kNotParserInserted,
+      WebURLRequest::kFetchCredentialsModeOmit);
+  record.Instantiate(scope.GetScriptState());
+  EXPECT_FALSE(module_script->IsErrored());
+  modulator->ResolveTreeFetch(module_script);
+
+  v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
+  EXPECT_TRUE(capture->WasCalled());
+  EXPECT_EQ("Error", capture->Name());
+  EXPECT_EQ("bar", capture->Message());
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/LayoutSelection.cpp b/third_party/WebKit/Source/core/editing/LayoutSelection.cpp
index b598598..1e2b445 100644
--- a/third_party/WebKit/Source/core/editing/LayoutSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/LayoutSelection.cpp
@@ -185,6 +185,23 @@
   DISALLOW_COPY_AND_ASSIGN(PaintInvalidationSet);
 };
 
+#ifndef NDEBUG
+void PrintPaintInvalidationSet(const PaintInvalidationSet& invalidation_set) {
+  std::stringstream stream;
+  stream << std::endl << "layout_objects:" << std::endl;
+  for (LayoutObject* layout_object : invalidation_set.layout_objects) {
+    PrintLayoutObjectForSelection(stream, layout_object);
+    stream << std::endl;
+  }
+  stream << "layout_blocks:" << std::endl;
+  for (LayoutBlock* layout_object : invalidation_set.layout_blocks) {
+    PrintLayoutObjectForSelection(stream, layout_object);
+    stream << std::endl;
+  }
+  LOG(INFO) << stream.str();
+}
+#endif
+
 static void InsertLayoutObjectAndAncestorBlocks(
     PaintInvalidationSet* invalidation_set,
     LayoutObject* layout_object) {
@@ -724,7 +741,7 @@
     ostream << "<null>";
     return;
   }
-  ostream << layout_object->GetNode()
+  ostream << (void*)layout_object << ' ' << layout_object->GetNode()
           << ", state:" << layout_object->GetSelectionState()
           << (layout_object->ShouldInvalidateSelection() ? ", ShouldInvalidate"
                                                          : ", NotInvalidate");
diff --git a/third_party/WebKit/Source/core/exported/WebNode.cpp b/third_party/WebKit/Source/core/exported/WebNode.cpp
index a4a2d5aa..3a8662b1 100644
--- a/third_party/WebKit/Source/core/exported/WebNode.cpp
+++ b/third_party/WebKit/Source/core/exported/WebNode.cpp
@@ -187,6 +187,22 @@
       ->QuerySelector(selector, IGNORE_EXCEPTION_FOR_TESTING);
 }
 
+WebVector<WebElement> WebNode::QuerySelectorAll(
+    const WebString& selector) const {
+  if (!private_->IsContainerNode())
+    return WebVector<WebElement>();
+  StaticElementList* elements =
+      ToContainerNode(private_.Get())
+          ->QuerySelectorAll(selector, IGNORE_EXCEPTION_FOR_TESTING);
+  if (elements) {
+    WebVector<WebElement> vector((size_t)elements->length());
+    for (unsigned i = 0; i < elements->length(); ++i)
+      vector[i] = elements->item(i);
+    return vector;
+  }
+  return WebVector<WebElement>();
+}
+
 bool WebNode::Focused() const {
   return private_->IsFocused();
 }
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn
index e04fb35..2ef2b47 100644
--- a/third_party/WebKit/Source/core/layout/BUILD.gn
+++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -234,8 +234,8 @@
     "TextAutosizer.h",
     "TextDecorationOffset.cpp",
     "TextDecorationOffset.h",
-    "TextDecorationOffsetBase",
     "TextDecorationOffsetBase.cpp",
+    "TextDecorationOffsetBase.h",
     "TextRunConstructor.cpp",
     "TextRunConstructor.h",
     "TracedLayoutObject.cpp",
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffset.cpp b/third_party/WebKit/Source/core/layout/TextDecorationOffset.cpp
index 75fe76dd..f2801baa6 100644
--- a/third_party/WebKit/Source/core/layout/TextDecorationOffset.cpp
+++ b/third_party/WebKit/Source/core/layout/TextDecorationOffset.cpp
@@ -11,7 +11,7 @@
 
 int TextDecorationOffset::ComputeUnderlineOffsetForUnder(
     float text_decoration_thickness,
-    LineVerticalPositionType position_type) {
+    LineVerticalPositionType position_type) const {
   const RootInlineBox& root = inline_text_box_->Root();
   FontBaseline baseline_type = root.BaselineType();
   LayoutUnit offset = inline_text_box_->OffsetTo(position_type, baseline_type);
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffset.h b/third_party/WebKit/Source/core/layout/TextDecorationOffset.h
index ea115c4..57ab82b 100644
--- a/third_party/WebKit/Source/core/layout/TextDecorationOffset.h
+++ b/third_party/WebKit/Source/core/layout/TextDecorationOffset.h
@@ -27,7 +27,7 @@
   ~TextDecorationOffset() {}
 
   int ComputeUnderlineOffsetForUnder(float text_decoration_thickness,
-                                     LineVerticalPositionType) override;
+                                     LineVerticalPositionType) const override;
 
  private:
   const InlineTextBox* inline_text_box_;
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.cpp b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.cpp
index 022e11a..3bfaaea2 100644
--- a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.cpp
+++ b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.cpp
@@ -11,7 +11,7 @@
 
 int TextDecorationOffsetBase::ComputeUnderlineOffsetForRoman(
     const FontMetrics& font_metrics,
-    float text_decoration_thickness) {
+    float text_decoration_thickness) const {
   // Compute the gap between the font and the underline. Use at least one
   // pixel gap, if underline is thick then use a bigger gap.
   int gap = 0;
@@ -34,7 +34,7 @@
 int TextDecorationOffsetBase::ComputeUnderlineOffset(
     ResolvedUnderlinePosition underline_position,
     const FontMetrics& font_metrics,
-    float text_decoration_thickness) {
+    float text_decoration_thickness) const {
   switch (underline_position) {
     default:
       NOTREACHED();
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h
index 9c046b03..d7eaf2c 100644
--- a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h
+++ b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h
@@ -23,15 +23,16 @@
   TextDecorationOffsetBase(const ComputedStyle& style) : style_(style) {}
   ~TextDecorationOffsetBase() {}
 
-  virtual int ComputeUnderlineOffsetForUnder(float text_decoration_thickness,
-                                             LineVerticalPositionType) = 0;
+  virtual int ComputeUnderlineOffsetForUnder(
+      float text_decoration_thickness,
+      LineVerticalPositionType) const = 0;
 
   int ComputeUnderlineOffsetForRoman(const FontMetrics&,
-                                     float text_decoration_thickness);
+                                     float text_decoration_thickness) const;
 
   int ComputeUnderlineOffset(ResolvedUnderlinePosition,
                              const FontMetrics&,
-                             float text_decoration_thickness);
+                             float text_decoration_thickness) const;
 
  protected:
   const ComputedStyle& style_;
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
index 65e70f9..26f90ac9 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
@@ -1106,12 +1106,6 @@
           std::max(bottom_glyph_overflow, emphasis_mark_height);
   }
 
-  // If letter-spacing is negative, we should factor that into right layout
-  // overflow. Even in RTL, letter-spacing is applied to the right, so this is
-  // not an issue with left overflow.
-  right_glyph_overflow -=
-      std::min(0.0f, style.GetFont().GetFontDescription().LetterSpacing());
-
   LayoutRectOutsets text_shadow_logical_outsets;
   if (ShadowList* text_shadow = style.TextShadow()) {
     text_shadow_logical_outsets =
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.cc
index 05ce8f3f..d910224 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.cc
@@ -40,10 +40,6 @@
 
   // TODO(kojii): Implement emphasis marks.
 
-  // letter-spacing, including negative, is built into ShapeResult.
-  // No need to take it into account here.
-  // TODO(kojii): Is this ture? Need to test.
-
   if (ShadowList* text_shadow = style.TextShadow()) {
     // TODO(kojii): Implement text shadow.
   }
diff --git a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
index 7b898eab..f4b1516 100644
--- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
@@ -132,61 +132,6 @@
   }
 }
 
-static void PaintDecorationsExceptLineThrough(
-    TextPainter& text_painter,
-    bool& has_line_through_decoration,
-    const InlineTextBox& box,
-    const DecorationInfo& decoration_info,
-    const LineLayoutItem& decorating_box,
-    const PaintInfo& paint_info,
-    const Vector<AppliedTextDecoration>& decorations) {
-  GraphicsContext& context = paint_info.context;
-  GraphicsContextStateSaver state_saver(context);
-  context.SetStrokeThickness(decoration_info.thickness);
-
-  // text-underline-position may flip underline and overline.
-  ResolvedUnderlinePosition underline_position =
-      decoration_info.underline_position;
-  bool flip_underline_and_overline = false;
-  if (underline_position == ResolvedUnderlinePosition::kOver) {
-    flip_underline_and_overline = true;
-    underline_position = ResolvedUnderlinePosition::kUnder;
-  }
-
-  TextDecorationOffset decoration_offset(*decoration_info.style, &box,
-                                         decorating_box);
-  for (const AppliedTextDecoration& decoration : decorations) {
-    TextDecoration lines = decoration.Lines();
-    bool has_underline = EnumHasFlags(lines, TextDecoration::kUnderline);
-    bool has_overline = EnumHasFlags(lines, TextDecoration::kOverline);
-    if (flip_underline_and_overline)
-      std::swap(has_underline, has_overline);
-    if (has_underline && decoration_info.font_data) {
-      const int underline_offset = decoration_offset.ComputeUnderlineOffset(
-          underline_position, decoration_info.font_data->GetFontMetrics(),
-          decoration_info.thickness);
-      text_painter.PaintDecorationUnderOrOverLine(
-          context, decoration_info, decoration, underline_offset,
-          decoration_info.double_offset);
-    }
-    if (has_overline) {
-      const int overline_offset =
-          decoration_offset.ComputeUnderlineOffsetForUnder(
-              decoration_info.thickness,
-              flip_underline_and_overline
-                  ? LineVerticalPositionType::TopOfEmHeight
-                  : LineVerticalPositionType::TextTop);
-      text_painter.PaintDecorationUnderOrOverLine(
-          context, decoration_info, decoration, overline_offset,
-          -decoration_info.double_offset);
-    }
-    // We could instead build a vector of the TextDecoration instances needing
-    // line-through but this is a rare case so better to avoid vector overhead.
-    has_line_through_decoration |=
-        EnumHasFlags(lines, TextDecoration::kLineThrough);
-  }
-}
-
 void InlineTextBoxPainter::Paint(const PaintInfo& paint_info,
                                  const LayoutPoint& paint_offset) {
   if (!ShouldPaintTextBox(paint_info))
@@ -430,10 +375,12 @@
       PrepareContextForDecoration(context, state_saver,
                                   inline_text_box_.IsHorizontal(), text_style,
                                   combined_text, box_rect);
-      PaintDecorationsExceptLineThrough(
-          text_painter, has_line_through_decoration, inline_text_box_,
-          decoration_info, decorating_box, paint_info,
-          style_to_use.AppliedTextDecorations());
+
+      TextDecorationOffset decoration_offset(*decoration_info.style,
+                                             &inline_text_box_, decorating_box);
+      text_painter.PaintDecorationsExceptLineThrough(
+          decoration_offset, decoration_info, paint_info,
+          style_to_use.AppliedTextDecorations(), &has_line_through_decoration);
       RestoreContextFromDecoration(context, combined_text, box_rect);
     }
 
diff --git a/third_party/WebKit/Source/core/paint/TextPainterBase.cpp b/third_party/WebKit/Source/core/paint/TextPainterBase.cpp
index e1ef2616..e3d9847 100644
--- a/third_party/WebKit/Source/core/paint/TextPainterBase.cpp
+++ b/third_party/WebKit/Source/core/paint/TextPainterBase.cpp
@@ -5,6 +5,8 @@
 #include "core/paint/TextPainterBase.h"
 
 #include "core/dom/Document.h"
+#include "core/layout/TextDecorationOffsetBase.h"
+#include "core/layout/line/LineVerticalPositionType.h"
 #include "core/paint/AppliedDecorationPainter.h"
 #include "core/paint/BoxPainterBase.h"
 #include "core/paint/PaintInfo.h"
@@ -184,6 +186,60 @@
   }
 }
 
+void TextPainterBase::PaintDecorationsExceptLineThrough(
+    const TextDecorationOffsetBase& decoration_offset,
+    const DecorationInfo& decoration_info,
+    const PaintInfo& paint_info,
+    const Vector<AppliedTextDecoration>& decorations,
+    bool* has_line_through_decoration) {
+  GraphicsContext& context = paint_info.context;
+  GraphicsContextStateSaver state_saver(context);
+  context.SetStrokeThickness(decoration_info.thickness);
+
+  // text-underline-position may flip underline and overline.
+  ResolvedUnderlinePosition underline_position =
+      decoration_info.underline_position;
+  bool flip_underline_and_overline = false;
+  if (underline_position == ResolvedUnderlinePosition::kOver) {
+    flip_underline_and_overline = true;
+    underline_position = ResolvedUnderlinePosition::kUnder;
+  }
+
+  for (const AppliedTextDecoration& decoration : decorations) {
+    TextDecoration lines = decoration.Lines();
+    bool has_underline = EnumHasFlags(lines, TextDecoration::kUnderline);
+    bool has_overline = EnumHasFlags(lines, TextDecoration::kOverline);
+    if (flip_underline_and_overline)
+      std::swap(has_underline, has_overline);
+
+    if (has_underline && decoration_info.font_data) {
+      const int underline_offset = decoration_offset.ComputeUnderlineOffset(
+          underline_position, decoration_info.font_data->GetFontMetrics(),
+          decoration_info.thickness);
+      PaintDecorationUnderOrOverLine(context, decoration_info, decoration,
+                                     underline_offset,
+                                     decoration_info.double_offset);
+    }
+
+    if (has_overline) {
+      LineVerticalPositionType position =
+          flip_underline_and_overline ? LineVerticalPositionType::TopOfEmHeight
+                                      : LineVerticalPositionType::TextTop;
+      const int overline_offset =
+          decoration_offset.ComputeUnderlineOffsetForUnder(
+              decoration_info.thickness, position);
+      PaintDecorationUnderOrOverLine(context, decoration_info, decoration,
+                                     overline_offset,
+                                     -decoration_info.double_offset);
+    }
+
+    // We could instead build a vector of the TextDecoration instances needing
+    // line-through but this is a rare case so better to avoid vector overhead.
+    *has_line_through_decoration |=
+        EnumHasFlags(lines, TextDecoration::kLineThrough);
+  }
+}
+
 void TextPainterBase::PaintDecorationsOnlyLineThrough(
     const DecorationInfo& decoration_info,
     const PaintInfo& paint_info,
diff --git a/third_party/WebKit/Source/core/paint/TextPainterBase.h b/third_party/WebKit/Source/core/paint/TextPainterBase.h
index 17df9bd..e9e035a 100644
--- a/third_party/WebKit/Source/core/paint/TextPainterBase.h
+++ b/third_party/WebKit/Source/core/paint/TextPainterBase.h
@@ -22,6 +22,7 @@
 class Document;
 class GraphicsContext;
 class GraphicsContextStateSaver;
+class TextDecorationOffsetBase;
 struct PaintInfo;
 
 // Base class for text painting. Has no dependencies on the layout tree and thus
@@ -50,6 +51,11 @@
                                     bool horizontal,
                                     GraphicsContextStateSaver&);
 
+  void PaintDecorationsExceptLineThrough(const TextDecorationOffsetBase&,
+                                         const DecorationInfo&,
+                                         const PaintInfo&,
+                                         const Vector<AppliedTextDecoration>&,
+                                         bool* has_line_through_decoration);
   void PaintDecorationsOnlyLineThrough(const DecorationInfo&,
                                        const PaintInfo&,
                                        const Vector<AppliedTextDecoration>&);
diff --git a/third_party/WebKit/Source/platform/WebTaskRunner.cpp b/third_party/WebKit/Source/platform/WebTaskRunner.cpp
index d7b9464..947e684 100644
--- a/third_party/WebKit/Source/platform/WebTaskRunner.cpp
+++ b/third_party/WebKit/Source/platform/WebTaskRunner.cpp
@@ -103,7 +103,7 @@
 
 TaskHandle& TaskHandle::operator=(TaskHandle&& other) {
   TaskHandle tmp(std::move(other));
-  runner_.Swap(tmp.runner_);
+  runner_.swap(tmp.runner_);
   return *this;
 }
 
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp
index af426d3..76734e6 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp
@@ -11,6 +11,7 @@
 #include "platform/fonts/FontCache.h"
 #include "platform/fonts/FontTestUtilities.h"
 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h"
+#include "platform/fonts/shaping/ShapeResultSpacing.h"
 #include "platform/fonts/shaping/ShapeResultTestInfo.h"
 #include "platform/text/TextBreakIterator.h"
 #include "platform/text/TextRun.h"
@@ -362,6 +363,23 @@
   EXPECT_EQ(string.length(), result->EndIndexForResult());
 }
 
+TEST_F(HarfBuzzShaperTest, NegativeLetterSpacing) {
+  String string(u"Hello");
+  HarfBuzzShaper shaper(string.Characters16(), string.length());
+  RefPtr<ShapeResult> result = shaper.Shape(&font, TextDirection::kLtr);
+  float width = result->Width();
+  FloatRect bounds = result->Bounds();
+
+  ShapeResultSpacing<String> spacing(string);
+  FontDescription font_description;
+  font_description.SetLetterSpacing(-5);
+  spacing.SetSpacing(font_description);
+  result->ApplySpacing(spacing);
+
+  EXPECT_EQ(5 * 5, width - result->Width());
+  EXPECT_EQ(5 * 4 - 1, bounds.Width() - result->Bounds().Width());
+}
+
 TEST_F(HarfBuzzShaperTest, PositionForOffsetLatin) {
   String string = To16Bit("Hello World!", 12);
   TextDirection direction = TextDirection::kLtr;
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
index 2d4a9cc..beea269 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
@@ -319,6 +319,7 @@
     int text_start_offset) {
   float offset = 0;
   float total_space = 0;
+  float space = 0;
   for (auto& run : runs_) {
     if (!run)
       continue;
@@ -334,7 +335,7 @@
         continue;
       }
 
-      float space = spacing.ComputeSpacing(
+      space = spacing.ComputeSpacing(
           run_start_index + glyph_data.character_index, offset);
       glyph_data.advance += space;
       total_space_for_run += space;
@@ -355,6 +356,20 @@
     total_space += total_space_for_run;
   }
   width_ += total_space;
+
+  // The spacing on the right of the last glyph does not affect the glyph
+  // bounding box. Thus, the glyph bounding box becomes smaller than the advance
+  // if the letter spacing is positve, or larger if negative.
+  if (space) {
+    total_space -= space;
+
+    // TODO(kojii): crbug.com/768284: There are cases where
+    // InlineTextBox::LogicalWidth() is round down of ShapeResult::Width() in
+    // LayoutUnit. Ceiling the width did not help. Add 1px to avoid cut-off.
+    if (space < 0)
+      total_space += 1;
+  }
+
   // Glyph bounding box is in logical space.
   glyph_bounding_box_.SetWidth(glyph_bounding_box_.Width() + total_space);
 }
diff --git a/third_party/WebKit/Source/platform/wtf/RefPtr.h b/third_party/WebKit/Source/platform/wtf/RefPtr.h
index b635862..980b0ed 100644
--- a/third_party/WebKit/Source/platform/wtf/RefPtr.h
+++ b/third_party/WebKit/Source/platform/wtf/RefPtr.h
@@ -94,7 +94,7 @@
   explicit operator bool() const { return ptr_ != nullptr; }
 
   RefPtr& operator=(RefPtr o) {
-    Swap(o);
+    swap(o);
     return *this;
   }
   RefPtr& operator=(std::nullptr_t) {
@@ -107,7 +107,7 @@
   template <typename U>
   RefPtr& operator=(RefPtrValuePeeker<U>);
 
-  void Swap(RefPtr&);
+  void swap(RefPtr&);
 
  private:
   friend RefPtr AdoptRef<T>(T*);
@@ -129,18 +129,18 @@
 template <typename U>
 inline RefPtr<T>& RefPtr<T>::operator=(RefPtrValuePeeker<U> optr) {
   RefPtr ptr = static_cast<U*>(optr);
-  Swap(ptr);
+  swap(ptr);
   return *this;
 }
 
 template <class T>
-inline void RefPtr<T>::Swap(RefPtr& o) {
+inline void RefPtr<T>::swap(RefPtr& o) {
   std::swap(ptr_, o.ptr_);
 }
 
 template <class T>
 inline void swap(RefPtr<T>& a, RefPtr<T>& b) {
-  a.Swap(b);
+  a.swap(b);
 }
 
 template <typename T, typename U>
diff --git a/third_party/WebKit/Source/platform/wtf/text/WTFString.h b/third_party/WebKit/Source/platform/wtf/text/WTFString.h
index 949075a..2eaac98 100644
--- a/third_party/WebKit/Source/platform/wtf/text/WTFString.h
+++ b/third_party/WebKit/Source/platform/wtf/text/WTFString.h
@@ -99,7 +99,7 @@
   String(StringImpl* impl) : impl_(impl) {}
   String(RefPtr<StringImpl> impl) : impl_(std::move(impl)) {}
 
-  void swap(String& o) { impl_.Swap(o.impl_); }
+  void swap(String& o) { impl_.swap(o.impl_); }
 
   template <typename CharType>
   static String Adopt(StringBuffer<CharType>& buffer) {
diff --git a/third_party/WebKit/public/web/WebNode.h b/third_party/WebKit/public/web/WebNode.h
index ce9fbea..3a022f2c 100644
--- a/third_party/WebKit/public/web/WebNode.h
+++ b/third_party/WebKit/public/web/WebNode.h
@@ -93,6 +93,8 @@
   // If the JS API would have thrown this returns null instead.
   WebElement QuerySelector(const WebString& selector) const;
 
+  WebVector<WebElement> QuerySelectorAll(const WebString& selector) const;
+
   bool Focused() const;
 
   WebPluginContainer* PluginContainer() const;
diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn
deleted file mode 100644
index 6d77030..0000000
--- a/third_party/breakpad/BUILD.gn
+++ /dev/null
@@ -1,988 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//build/symlink.gni")
-import("//testing/libfuzzer/fuzzer_test.gni")
-import("//testing/test.gni")
-
-if (is_win) {
-  import("//build/config/win/visual_studio_version.gni")
-}
-
-config("tools_config") {
-  include_dirs = [
-    "breakpad/src",
-    "breakpad/src/third_party",
-  ]
-  if (is_android) {
-    defines = [ "__ANDROID__" ]
-  }
-  if (is_clang) {
-    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
-  }
-}
-
-config("internal_config") {
-  include_dirs = [ "breakpad/src" ]
-  defines = []
-  if (is_debug) {
-    # This is needed for GTMLogger to work correctly.
-    defines += [ "DEBUG" ]
-  }
-  if (is_android) {
-    defines += [ "__ANDROID__" ]
-  }
-}
-
-config("client_config") {
-  include_dirs = [ "breakpad/src" ]
-  if (is_android) {
-    include_dirs += [ "breakpad/src/common/android/include" ]
-  }
-  if (is_chromeos) {
-    defines = [ "__CHROMEOS__" ]
-  }
-}
-
-config("handler_config") {
-  include_dirs = [ "breakpad/src" ]
-}
-
-config("sender_config") {
-  include_dirs = [ "breakpad/src" ]
-}
-
-config("breakpad_unittest_config") {
-  # One of the breakpad unit tests test that we can detect the proper build-id.
-  # We must override the build-id for this one target.
-  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
-}
-
-# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
-# that do not build on Windows.
-if (!is_win) {
-  if (current_toolchain == host_toolchain) {
-    # Contains the code shared by both {micro,mini}dump_stackwalk.
-    static_library("stackwalk_common") {
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources = [
-        "breakpad/src/processor/basic_code_module.h",
-        "breakpad/src/processor/basic_code_modules.cc",
-        "breakpad/src/processor/basic_code_modules.h",
-        "breakpad/src/processor/basic_source_line_resolver.cc",
-        "breakpad/src/processor/call_stack.cc",
-        "breakpad/src/processor/cfi_frame_info.cc",
-        "breakpad/src/processor/cfi_frame_info.h",
-        "breakpad/src/processor/disassembler_x86.cc",
-        "breakpad/src/processor/disassembler_x86.h",
-        "breakpad/src/processor/dump_context.cc",
-        "breakpad/src/processor/dump_object.cc",
-        "breakpad/src/processor/logging.cc",
-        "breakpad/src/processor/logging.h",
-        "breakpad/src/processor/pathname_stripper.cc",
-        "breakpad/src/processor/pathname_stripper.h",
-        "breakpad/src/processor/proc_maps_linux.cc",
-        "breakpad/src/processor/process_state.cc",
-        "breakpad/src/processor/simple_symbol_supplier.cc",
-        "breakpad/src/processor/simple_symbol_supplier.h",
-        "breakpad/src/processor/source_line_resolver_base.cc",
-        "breakpad/src/processor/stack_frame_cpu.cc",
-        "breakpad/src/processor/stack_frame_symbolizer.cc",
-        "breakpad/src/processor/stackwalk_common.cc",
-        "breakpad/src/processor/stackwalker.cc",
-        "breakpad/src/processor/stackwalker_amd64.cc",
-        "breakpad/src/processor/stackwalker_amd64.h",
-        "breakpad/src/processor/stackwalker_arm.cc",
-        "breakpad/src/processor/stackwalker_arm.h",
-        "breakpad/src/processor/stackwalker_arm64.cc",
-        "breakpad/src/processor/stackwalker_arm64.h",
-        "breakpad/src/processor/stackwalker_mips.cc",
-        "breakpad/src/processor/stackwalker_mips.h",
-        "breakpad/src/processor/stackwalker_ppc.cc",
-        "breakpad/src/processor/stackwalker_ppc.h",
-        "breakpad/src/processor/stackwalker_ppc64.cc",
-        "breakpad/src/processor/stackwalker_ppc64.h",
-        "breakpad/src/processor/stackwalker_sparc.cc",
-        "breakpad/src/processor/stackwalker_sparc.h",
-        "breakpad/src/processor/stackwalker_x86.cc",
-        "breakpad/src/processor/stackwalker_x86.h",
-        "breakpad/src/processor/tokenize.cc",
-        "breakpad/src/processor/tokenize.h",
-
-        # libdisasm
-        "breakpad/src/third_party/libdisasm/ia32_implicit.c",
-        "breakpad/src/third_party/libdisasm/ia32_implicit.h",
-        "breakpad/src/third_party/libdisasm/ia32_insn.c",
-        "breakpad/src/third_party/libdisasm/ia32_insn.h",
-        "breakpad/src/third_party/libdisasm/ia32_invariant.c",
-        "breakpad/src/third_party/libdisasm/ia32_invariant.h",
-        "breakpad/src/third_party/libdisasm/ia32_modrm.c",
-        "breakpad/src/third_party/libdisasm/ia32_modrm.h",
-        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.c",
-        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.h",
-        "breakpad/src/third_party/libdisasm/ia32_operand.c",
-        "breakpad/src/third_party/libdisasm/ia32_operand.h",
-        "breakpad/src/third_party/libdisasm/ia32_reg.c",
-        "breakpad/src/third_party/libdisasm/ia32_reg.h",
-        "breakpad/src/third_party/libdisasm/ia32_settings.c",
-        "breakpad/src/third_party/libdisasm/ia32_settings.h",
-        "breakpad/src/third_party/libdisasm/libdis.h",
-        "breakpad/src/third_party/libdisasm/qword.h",
-        "breakpad/src/third_party/libdisasm/x86_disasm.c",
-        "breakpad/src/third_party/libdisasm/x86_format.c",
-        "breakpad/src/third_party/libdisasm/x86_imm.c",
-        "breakpad/src/third_party/libdisasm/x86_imm.h",
-        "breakpad/src/third_party/libdisasm/x86_insn.c",
-        "breakpad/src/third_party/libdisasm/x86_misc.c",
-        "breakpad/src/third_party/libdisasm/x86_operand_list.c",
-        "breakpad/src/third_party/libdisasm/x86_operand_list.h",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-    }
-
-    fuzzer_test("minidump_fuzzer") {
-      sources = [
-        "breakpad/src/processor/exploitability.cc",
-        "breakpad/src/processor/minidump.cc",
-        "breakpad/src/processor/minidump_processor.cc",
-        "minidump_fuzzer.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//base",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-      include_dirs = [ "breakpad/src" ]
-      dict = "minidump_fuzzer.dict"
-
-      libfuzzer_options = [
-        "close_fd_mask=3",
-        "max_len=128000",
-      ]
-
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources += [
-        "breakpad/src/processor/exploitability_linux.cc",
-        "breakpad/src/processor/exploitability_linux.h",
-        "breakpad/src/processor/exploitability_win.cc",
-        "breakpad/src/processor/exploitability_win.h",
-        "breakpad/src/processor/symbolic_constants_win.cc",
-        "breakpad/src/processor/symbolic_constants_win.h",
-      ]
-    }
-
-    executable("microdump_stackwalk") {
-      sources = [
-        "breakpad/src/processor/microdump.cc",
-        "breakpad/src/processor/microdump_processor.cc",
-        "breakpad/src/processor/microdump_stackwalk.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//build/config:exe_and_shlib_deps",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-    }
-
-    executable("minidump_stackwalk") {
-      sources = [
-        "breakpad/src/processor/exploitability.cc",
-        "breakpad/src/processor/minidump.cc",
-        "breakpad/src/processor/minidump_processor.cc",
-        "breakpad/src/processor/minidump_stackwalk.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//build/config:exe_and_shlib_deps",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources += [
-        "breakpad/src/processor/exploitability_linux.cc",
-        "breakpad/src/processor/exploitability_linux.h",
-        "breakpad/src/processor/exploitability_win.cc",
-        "breakpad/src/processor/exploitability_win.h",
-        "breakpad/src/processor/symbolic_constants_win.cc",
-        "breakpad/src/processor/symbolic_constants_win.h",
-      ]
-    }
-
-    executable("minidump_dump") {
-      set_sources_assignment_filter([])
-      sources = [
-        "breakpad/src/processor/basic_code_module.h",
-        "breakpad/src/processor/basic_code_modules.cc",
-        "breakpad/src/processor/basic_code_modules.h",
-        "breakpad/src/processor/dump_context.cc",
-        "breakpad/src/processor/dump_object.cc",
-        "breakpad/src/processor/logging.cc",
-        "breakpad/src/processor/logging.h",
-        "breakpad/src/processor/minidump.cc",
-        "breakpad/src/processor/minidump_dump.cc",
-        "breakpad/src/processor/pathname_stripper.cc",
-        "breakpad/src/processor/pathname_stripper.h",
-        "breakpad/src/processor/proc_maps_linux.cc",
-      ]
-
-      configs += [ ":tools_config" ]
-
-      # There are some warnings in this code.
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    # Aliases for convenience.
-    binary_symlink("microdump_stackwalk") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("minidump_stackwalk") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("minidump_dump") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-  }
-}
-
-# Mac --------------------------------------------------------------------------
-
-if (is_mac) {
-  if (current_toolchain == host_toolchain) {
-    executable("dump_syms") {
-      sources = [
-        "breakpad/src/common/dwarf/bytereader.cc",
-        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
-        "breakpad/src/common/dwarf/dwarf2reader.cc",
-        "breakpad/src/common/dwarf/elf_reader.cc",
-        "breakpad/src/common/dwarf/elf_reader.h",
-        "breakpad/src/common/dwarf_cfi_to_module.cc",
-        "breakpad/src/common/dwarf_cu_to_module.cc",
-        "breakpad/src/common/dwarf_line_to_module.cc",
-        "breakpad/src/common/language.cc",
-        "breakpad/src/common/mac/arch_utilities.cc",
-        "breakpad/src/common/mac/arch_utilities.h",
-        "breakpad/src/common/mac/dump_syms.cc",
-        "breakpad/src/common/mac/file_id.cc",
-        "breakpad/src/common/mac/macho_id.cc",
-        "breakpad/src/common/mac/macho_reader.cc",
-        "breakpad/src/common/mac/macho_utilities.cc",
-        "breakpad/src/common/mac/macho_walker.cc",
-        "breakpad/src/common/md5.cc",
-        "breakpad/src/common/module.cc",
-        "breakpad/src/common/stabs_reader.cc",
-        "breakpad/src/common/stabs_to_module.cc",
-        "breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc",
-      ]
-
-      # For breakpad/src/common/stabs_reader.h.
-      defines = [ "HAVE_MACH_O_NLIST_H" ]
-      include_dirs = [ "breakpad/src/common/mac" ]
-
-      # The DWARF utilities require -funsigned-char.
-      cflags = [ "-funsigned-char" ]
-
-      configs += [ ":internal_config" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      # dwarf2reader.cc uses dynamic_cast.
-      configs -= [ "//build/config/compiler:no_rtti" ]
-      configs += [ "//build/config/compiler:rtti" ]
-
-      libs = [ "Foundation.framework" ]
-
-      if (!is_debug) {
-        # dump_syms crashes when built at -O1, -O2, and -O3.  It does
-        # not crash at -Os.  To play it safe, dump_syms is always built
-        # at -O0 until this can be sorted out.
-        # https://crbug.com/google-breakpad/329
-        configs -= [ "//build/config/compiler:default_optimization" ]
-        cflags += [ "-O0" ]
-      }
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-
-    executable("symupload") {
-      sources = [
-        "breakpad/src/common/mac/HTTPMultipartUpload.m",
-        "breakpad/src/tools/mac/symupload/symupload.m",
-      ]
-
-      include_dirs = [ "breakpad/src/common/mac" ]
-
-      libs = [ "Foundation.framework" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    binary_symlink("dump_syms") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("symupload") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-  }
-}
-
-if (is_ios) {
-  binary_symlink("dump_syms") {
-    binary_label = ":$target_name($host_toolchain)"
-  }
-  binary_symlink("symupload") {
-    binary_label = ":$target_name($host_toolchain)"
-  }
-}
-
-if (is_mac) {
-  static_library("utilities") {
-    sources = [
-      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
-      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
-      "breakpad/src/client/mac/handler/dynamic_images.cc",
-      "breakpad/src/client/mac/handler/minidump_generator.cc",
-      "breakpad/src/client/minidump_file_writer.cc",
-      "breakpad/src/common/convert_UTF.c",
-      "breakpad/src/common/mac/MachIPC.mm",
-      "breakpad/src/common/mac/arch_utilities.cc",
-      "breakpad/src/common/mac/bootstrap_compat.cc",
-      "breakpad/src/common/mac/file_id.cc",
-      "breakpad/src/common/mac/launch_reporter.cc",
-      "breakpad/src/common/mac/macho_id.cc",
-      "breakpad/src/common/mac/macho_utilities.cc",
-      "breakpad/src/common/mac/macho_walker.cc",
-      "breakpad/src/common/mac/string_utilities.cc",
-      "breakpad/src/common/md5.cc",
-      "breakpad/src/common/simple_string_dictionary.cc",
-      "breakpad/src/common/string_conversion.cc",
-    ]
-
-    configs += [ ":internal_config" ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-  }
-
-  executable("crash_inspector") {
-    sources = [
-      "breakpad/src/client/mac/crash_generation/Inspector.mm",
-      "breakpad/src/client/mac/crash_generation/InspectorMain.mm",
-    ]
-
-    # TODO(GYP): 'mac_real_dsym': 1,
-
-    include_dirs = [
-      "breakpad/src/client/apple/Framework",
-      "breakpad/src/common/mac",
-      "breakpad/src",
-    ]
-    libs = [
-      "CoreServices.framework",
-      "Foundation.framework",
-    ]
-
-    deps = [
-      ":utilities",
-      "//build/config:exe_and_shlib_deps",
-    ]
-  }
-
-  # TODO(GYP) this target has some mac_bundle_resources stuff.
-  # executable("crash_report_sender") {
-  # }
-  group("crash_report_sender") {
-  }
-
-  config("breakpad_config") {
-    include_dirs = [ "breakpad/src/client/apple/Framework" ]
-  }
-
-  static_library("breakpad") {
-    sources = [
-      "breakpad/src/client/mac/Framework/Breakpad.mm",
-      "breakpad/src/client/mac/Framework/OnDemandServer.mm",
-      "breakpad/src/client/mac/crash_generation/crash_generation_client.cc",
-      "breakpad/src/client/mac/crash_generation/crash_generation_client.h",
-      "breakpad/src/client/mac/handler/exception_handler.cc",
-      "breakpad/src/client/mac/handler/protected_memory_allocator.cc",
-    ]
-
-    configs += [ ":internal_config" ]
-    public_configs = [ ":breakpad_config" ]
-
-    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
-    include_dirs = [ "breakpad/src/client/apple/Framework" ]
-
-    deps = [
-      ":crash_inspector",
-      ":crash_report_sender",
-      ":utilities",
-    ]
-  }
-
-  group("client") {
-    public_configs = [ ":client_config" ]
-  }
-}
-
-if (is_linux || is_android) {
-  if (current_toolchain == host_toolchain) {
-    executable("symupload") {
-      sources = [
-        "breakpad/src/common/linux/http_upload.cc",
-        "breakpad/src/common/linux/http_upload.h",
-        "breakpad/src/common/linux/symbol_upload.cc",
-        "breakpad/src/common/linux/symbol_upload.h",
-        "breakpad/src/tools/linux/symupload/sym_upload.cc",
-      ]
-
-      include_dirs = [
-        "breakpad/src",
-        "breakpad/src/third_party",
-      ]
-
-      configs += [ ":tools_config" ]
-
-      libs = [ "dl" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-
-    # dump_syms is a host tool, so only compile it for the host system.
-    executable("dump_syms") {
-      sources = [
-        "breakpad/src/common/dwarf/bytereader.cc",
-        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
-        "breakpad/src/common/dwarf/dwarf2reader.cc",
-        "breakpad/src/common/dwarf/elf_reader.cc",
-        "breakpad/src/common/dwarf/elf_reader.h",
-        "breakpad/src/common/dwarf_cfi_to_module.cc",
-        "breakpad/src/common/dwarf_cfi_to_module.h",
-        "breakpad/src/common/dwarf_cu_to_module.cc",
-        "breakpad/src/common/dwarf_cu_to_module.h",
-        "breakpad/src/common/dwarf_line_to_module.cc",
-        "breakpad/src/common/dwarf_line_to_module.h",
-        "breakpad/src/common/language.cc",
-        "breakpad/src/common/language.h",
-        "breakpad/src/common/linux/crc32.cc",
-        "breakpad/src/common/linux/crc32.h",
-        "breakpad/src/common/linux/dump_symbols.cc",
-        "breakpad/src/common/linux/dump_symbols.h",
-        "breakpad/src/common/linux/elf_symbols_to_module.cc",
-        "breakpad/src/common/linux/elf_symbols_to_module.h",
-        "breakpad/src/common/linux/elfutils.cc",
-        "breakpad/src/common/linux/elfutils.h",
-        "breakpad/src/common/linux/file_id.cc",
-        "breakpad/src/common/linux/file_id.h",
-        "breakpad/src/common/linux/guid_creator.h",
-        "breakpad/src/common/linux/linux_libc_support.cc",
-        "breakpad/src/common/linux/linux_libc_support.h",
-        "breakpad/src/common/linux/memory_mapped_file.cc",
-        "breakpad/src/common/linux/memory_mapped_file.h",
-        "breakpad/src/common/module.cc",
-        "breakpad/src/common/module.h",
-        "breakpad/src/common/stabs_reader.cc",
-        "breakpad/src/common/stabs_reader.h",
-        "breakpad/src/common/stabs_to_module.cc",
-        "breakpad/src/common/stabs_to_module.h",
-        "breakpad/src/tools/linux/dump_syms/dump_syms.cc",
-      ]
-
-      # There are some warnings in this code.
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
-      # don't support RTTI, we enable it for this single target. Since
-      # dump_syms doesn't share any object files with anything else,
-      # this doesn't end up polluting Chrome itself.
-      configs -= [ "//build/config/compiler:no_rtti" ]
-      configs += [ "//build/config/compiler:rtti" ]
-
-      # Breakpad rev 583 introduced this flag.
-      # Using this define, stabs_reader.h will include a.out.h to
-      # build on Linux.
-      defines = [ "HAVE_A_OUT_H" ]
-
-      include_dirs = [ "breakpad/src" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    # Aliases for convenience.
-    binary_symlink("dump_syms") {
-      binary_label = ":dump_syms($host_toolchain)"
-    }
-    binary_symlink("symupload") {
-      binary_label = ":symupload($host_toolchain)"
-    }
-  }
-
-  static_library("client") {
-    # Want all these sources for both Linux and Android.
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/client/linux/crash_generation/crash_generation_client.cc",
-      "breakpad/src/client/linux/crash_generation/crash_generation_client.h",
-      "breakpad/src/client/linux/dump_writer_common/mapping_info.h",
-      "breakpad/src/client/linux/dump_writer_common/thread_info.cc",
-      "breakpad/src/client/linux/dump_writer_common/thread_info.h",
-      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc",
-      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.h",
-      "breakpad/src/client/linux/handler/exception_handler.cc",
-      "breakpad/src/client/linux/handler/exception_handler.h",
-      "breakpad/src/client/linux/handler/minidump_descriptor.cc",
-      "breakpad/src/client/linux/handler/minidump_descriptor.h",
-      "breakpad/src/client/linux/log/log.cc",
-      "breakpad/src/client/linux/log/log.h",
-      "breakpad/src/client/linux/microdump_writer/microdump_writer.cc",
-      "breakpad/src/client/linux/microdump_writer/microdump_writer.h",
-      "breakpad/src/client/linux/minidump_writer/cpu_set.h",
-      "breakpad/src/client/linux/minidump_writer/directory_reader.h",
-      "breakpad/src/client/linux/minidump_writer/line_reader.h",
-      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc",
-      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.h",
-      "breakpad/src/client/linux/minidump_writer/linux_dumper.cc",
-      "breakpad/src/client/linux/minidump_writer/linux_dumper.h",
-      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
-      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h",
-      "breakpad/src/client/linux/minidump_writer/minidump_writer.cc",
-      "breakpad/src/client/linux/minidump_writer/minidump_writer.h",
-      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
-      "breakpad/src/client/minidump_file_writer-inl.h",
-      "breakpad/src/client/minidump_file_writer.cc",
-      "breakpad/src/client/minidump_file_writer.h",
-      "breakpad/src/common/convert_UTF.c",
-      "breakpad/src/common/convert_UTF.h",
-      "breakpad/src/common/linux/elf_core_dump.cc",
-      "breakpad/src/common/linux/elf_core_dump.h",
-      "breakpad/src/common/linux/elfutils.cc",
-      "breakpad/src/common/linux/elfutils.h",
-      "breakpad/src/common/linux/file_id.cc",
-      "breakpad/src/common/linux/file_id.h",
-      "breakpad/src/common/linux/google_crashdump_uploader.cc",
-      "breakpad/src/common/linux/google_crashdump_uploader.h",
-      "breakpad/src/common/linux/guid_creator.cc",
-      "breakpad/src/common/linux/guid_creator.h",
-      "breakpad/src/common/linux/libcurl_wrapper.cc",
-      "breakpad/src/common/linux/libcurl_wrapper.h",
-      "breakpad/src/common/linux/linux_libc_support.cc",
-      "breakpad/src/common/linux/linux_libc_support.h",
-      "breakpad/src/common/linux/memory_mapped_file.cc",
-      "breakpad/src/common/linux/memory_mapped_file.h",
-      "breakpad/src/common/linux/safe_readlink.cc",
-      "breakpad/src/common/linux/safe_readlink.h",
-      "breakpad/src/common/memory.h",
-      "breakpad/src/common/simple_string_dictionary.cc",
-      "breakpad/src/common/simple_string_dictionary.h",
-      "breakpad/src/common/string_conversion.cc",
-      "breakpad/src/common/string_conversion.h",
-    ]
-
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-    public_configs = [ ":client_config" ]
-
-    if (current_cpu == "arm" && is_chromeos) {
-      # Avoid running out of registers in
-      # linux_syscall_support.h:sys_clone()'s inline assembly.
-      cflags = [ "-marm" ]
-    }
-
-    # Clang's -mstackrealign doesn't work well with
-    # linux_syscall_support.h hand written asm syscalls.
-    # See https://crbug.com/556393
-    configs -= [ "//build/config/compiler:clang_stackrealign" ]
-
-    if (is_android) {
-      sources += [ "breakpad/src/common/android/breakpad_getcontext.S" ]
-    }
-
-    libs = [ "dl" ]
-
-    include_dirs = [
-      ".",
-      "breakpad/src",
-      "breakpad/src/client",
-      "breakpad/src/third_party/linux/include",
-    ]
-  }
-
-  static_library("processor_support") {
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/common/scoped_ptr.h",
-      "breakpad/src/processor/basic_code_modules.cc",
-      "breakpad/src/processor/basic_code_modules.h",
-      "breakpad/src/processor/dump_context.cc",
-      "breakpad/src/processor/dump_object.cc",
-      "breakpad/src/processor/logging.cc",
-      "breakpad/src/processor/logging.h",
-      "breakpad/src/processor/minidump.cc",
-      "breakpad/src/processor/pathname_stripper.cc",
-      "breakpad/src/processor/pathname_stripper.h",
-      "breakpad/src/processor/proc_maps_linux.cc",
-    ]
-
-    include_dirs = [
-      "breakpad/src",
-      "breakpad/src/client",
-      "breakpad/src/third_party/linux/include",
-      ".",
-    ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-  }
-
-  test("breakpad_unittests") {
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/client/linux/handler/exception_handler_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/directory_reader_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc",
-      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
-      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
-      "breakpad/src/common/linux/elf_core_dump_unittest.cc",
-      "breakpad/src/common/linux/file_id_unittest.cc",
-      "breakpad/src/common/linux/linux_libc_support_unittest.cc",
-      "breakpad/src/common/linux/synth_elf.cc",
-      "breakpad/src/common/linux/tests/auto_testfile.h",
-      "breakpad/src/common/linux/tests/crash_generator.cc",
-      "breakpad/src/common/linux/tests/crash_generator.h",
-      "breakpad/src/common/memory_range.h",
-      "breakpad/src/common/memory_unittest.cc",
-      "breakpad/src/common/simple_string_dictionary_unittest.cc",
-      "breakpad/src/common/test_assembler.cc",
-      "breakpad/src/common/tests/file_utils.cc",
-      "breakpad/src/common/tests/file_utils.h",
-      "breakpad/src/tools/linux/md2core/minidump_memory_range.h",
-      "breakpad/src/tools/linux/md2core/minidump_memory_range_unittest.cc",
-      "linux/breakpad_googletest_includes.h",
-    ]
-
-    deps = [
-      ":client",
-      ":linux_dumper_unittest_helper",
-      ":processor_support",
-      "//build/config:exe_and_shlib_deps",
-      "//testing/gmock",
-      "//testing/gtest",
-      "//testing/gtest:gtest_main",
-    ]
-
-    include_dirs = [
-      "linux",  # Use our copy of breakpad_googletest_includes.h
-      ".",
-    ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [
-      ":client_config",
-      "//build/config/compiler:no_chromium_code",
-    ]
-
-    if (is_clang) {
-      # See https://crbug.com/138571#c18
-      cflags = [ "-Wno-unused-value" ]
-    }
-
-    if (is_android) {
-      use_raw_android_executable = true
-      sources +=
-          [ "breakpad/src/common/android/breakpad_getcontext_unittest.cc" ]
-      libs = [ "log" ]
-      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
-    }
-
-    # Clang's -mstackrealign doesn't work well with
-    # linux_syscall_support.h hand written asm syscalls.
-    # See https://crbug.com/556393
-    configs -= [ "//build/config/compiler:clang_stackrealign" ]
-
-    # Add the breakpad unittest config at the end to override all configs.
-    configs += [ ":breakpad_unittest_config" ]
-  }
-
-  executable("linux_dumper_unittest_helper") {
-    set_sources_assignment_filter([])
-    testonly = true
-    sources = [
-      "breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
-    ]
-    deps = [
-      ":processor_support",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    configs += [ ":client_config" ]
-
-    if (is_component_build) {
-      ldflags = [
-        "-Wl,-rpath,",
-        rebase_path(root_build_dir),
-      ]
-    }
-  }
-
-  executable("generate_test_dump") {
-    set_sources_assignment_filter([])
-    testonly = true
-    sources = [
-      "linux/generate-test-dump.cc",
-    ]
-
-    # This file has an unused variable warning.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [
-      ":client_config",
-      "//build/config/compiler:no_chromium_code",
-    ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    if (is_android) {
-      libs = [ "log" ]
-    }
-  }
-
-  executable("minidump-2-core") {
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/tools/linux/md2core/minidump-2-core.cc",
-    ]
-
-    include_dirs = [ "breakpad/src" ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-  }
-
-  executable("core-2-minidump") {
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/tools/linux/core2md/core2md.cc",
-    ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    include_dirs = [ "breakpad/src" ]
-  }
-}
-
-if (is_win) {
-  executable("dump_syms") {
-    # TODO(scottmg) using this with VS2015 may break the crash server.
-    # https://crbug.com/696671
-    include_dirs = [
-      "$visual_studio_path/DIA SDK/include",
-      "breakpad/src",
-    ]
-
-    sources = [
-      "breakpad/src/common/windows/dia_util.cc",
-      "breakpad/src/common/windows/dia_util.h",
-      "breakpad/src/common/windows/guid_string.cc",
-      "breakpad/src/common/windows/guid_string.h",
-      "breakpad/src/common/windows/omap.cc",
-      "breakpad/src/common/windows/omap.h",
-      "breakpad/src/common/windows/pdb_source_line_writer.cc",
-      "breakpad/src/common/windows/pdb_source_line_writer.h",
-      "breakpad/src/common/windows/string_utils-inl.h",
-      "breakpad/src/common/windows/string_utils.cc",
-      "breakpad/src/tools/windows/dump_syms/dump_syms.cc",
-    ]
-
-    lib_dirs = []
-    if (target_cpu == "x64") {
-      lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
-    } else {
-      lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
-    }
-
-    libs = [
-      "diaguids.lib",
-      "imagehlp.lib",
-    ]
-    if (is_clang) {
-      # clang complains about microsoft-specific goto extensions. Instead of
-      # rewriting decade-old, goto-ridden code, disable the warning.
-      cflags = [ "-Wno-microsoft-goto" ]
-    }
-  }
-}
-
-if (is_ios) {
-  static_library("client") {
-    set_sources_assignment_filter([])
-    sources = [
-      "breakpad/src/client/ios/Breakpad.h",
-      "breakpad/src/client/ios/Breakpad.mm",
-      "breakpad/src/client/ios/BreakpadController.h",
-      "breakpad/src/client/ios/BreakpadController.mm",
-      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.h",
-      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm",
-      "breakpad/src/client/mac/crash_generation/ConfigFile.h",
-      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
-      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
-      "breakpad/src/client/mac/handler/breakpad_nlist_64.h",
-      "breakpad/src/client/mac/handler/dynamic_images.cc",
-      "breakpad/src/client/mac/handler/dynamic_images.h",
-      "breakpad/src/client/mac/handler/exception_handler.cc",
-      "breakpad/src/client/mac/handler/exception_handler.h",
-      "breakpad/src/client/mac/handler/minidump_generator.cc",
-      "breakpad/src/client/mac/handler/minidump_generator.h",
-      "breakpad/src/client/mac/handler/protected_memory_allocator.cc",
-      "breakpad/src/client/mac/handler/protected_memory_allocator.h",
-      "breakpad/src/client/mac/sender/uploader.h",
-      "breakpad/src/client/mac/sender/uploader.mm",
-      "breakpad/src/client/minidump_file_writer-inl.h",
-      "breakpad/src/client/minidump_file_writer.cc",
-      "breakpad/src/client/minidump_file_writer.h",
-      "breakpad/src/common/convert_UTF.c",
-      "breakpad/src/common/convert_UTF.h",
-      "breakpad/src/common/mac/HTTPMultipartUpload.m",
-      "breakpad/src/common/mac/file_id.cc",
-      "breakpad/src/common/mac/file_id.h",
-      "breakpad/src/common/mac/macho_id.cc",
-      "breakpad/src/common/mac/macho_id.h",
-      "breakpad/src/common/mac/macho_utilities.cc",
-      "breakpad/src/common/mac/macho_utilities.h",
-      "breakpad/src/common/mac/macho_walker.cc",
-      "breakpad/src/common/mac/macho_walker.h",
-      "breakpad/src/common/mac/string_utilities.cc",
-      "breakpad/src/common/mac/string_utilities.h",
-      "breakpad/src/common/md5.cc",
-      "breakpad/src/common/md5.h",
-      "breakpad/src/common/simple_string_dictionary.cc",
-      "breakpad/src/common/simple_string_dictionary.h",
-      "breakpad/src/common/string_conversion.cc",
-      "breakpad/src/common/string_conversion.h",
-      "breakpad/src/google_breakpad/common/minidump_format.h",
-    ]
-    set_sources_assignment_filter(sources_assignment_filter)
-
-    include_dirs = [
-      "breakpad/src",
-      "breakpad/src/client/mac/Framework",
-      "breakpad/src/common/mac",
-    ]
-
-    deps = [
-      "//third_party/google_toolbox_for_mac",
-    ]
-
-    public_configs = [ ":client_config" ]
-
-    if (is_clang) {
-      # See https://crbug.com/google-breakpad/675.
-      cflags = [ "-Wno-deprecated-declarations" ]
-    }
-  }
-}
-
-if (is_win) {
-  group("client") {
-    public_configs = [ ":client_config" ]
-  }
-
-  config("breakpad_handler_warnings") {
-    if (is_clang) {
-      # See https://crbug.com/google-breakpad/658.
-      cflags = [ "-Wno-reorder" ]
-    }
-  }
-
-  static_library("breakpad_handler") {
-    configs += [ ":handler_config" ]
-    if (is_win) {
-      public_configs = [ ":handler_config" ]
-    }
-
-    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
-
-    sources = [
-      "breakpad/src/client/windows/crash_generation/client_info.cc",
-      "breakpad/src/client/windows/crash_generation/client_info.h",
-      "breakpad/src/client/windows/crash_generation/crash_generation_client.cc",
-      "breakpad/src/client/windows/crash_generation/crash_generation_client.h",
-      "breakpad/src/client/windows/crash_generation/crash_generation_server.cc",
-      "breakpad/src/client/windows/crash_generation/crash_generation_server.h",
-      "breakpad/src/client/windows/crash_generation/minidump_generator.cc",
-      "breakpad/src/client/windows/crash_generation/minidump_generator.h",
-      "breakpad/src/client/windows/handler/exception_handler.cc",
-      "breakpad/src/client/windows/handler/exception_handler.h",
-      "breakpad/src/common/windows/guid_string.cc",
-      "breakpad/src/common/windows/guid_string.h",
-      "breakpad/src/common/windows/string_utils-inl.h",
-      "breakpad/src/google_breakpad/common/minidump_format.h",
-    ]
-    configs += [ ":breakpad_handler_warnings" ]
-  }
-
-  source_set("breakpad_sender") {
-    sources = [
-      "breakpad/src/client/windows/sender/crash_report_sender.cc",
-      "breakpad/src/client/windows/sender/crash_report_sender.h",
-      "breakpad/src/common/windows/http_upload.cc",
-      "breakpad/src/common/windows/http_upload.h",
-    ]
-    configs += [ ":sender_config" ]
-    public_configs = [ ":sender_config" ]
-  }
-}
diff --git a/third_party/breakpad/DEPS b/third_party/breakpad/DEPS
deleted file mode 100644
index 3d23004..0000000
--- a/third_party/breakpad/DEPS
+++ /dev/null
@@ -1,12 +0,0 @@
-skip_child_includes = [
-  'linux',
-]
-
-specific_include_rules = {
-  '^minidump_fuzzer\.cc$': [
-    '+base',
-    '+google_breakpad',
-    '+processor',
-    '+testing',
-  ],
-}
diff --git a/third_party/breakpad/README.chromium b/third_party/breakpad/README.chromium
deleted file mode 100644
index 4c8913b..0000000
--- a/third_party/breakpad/README.chromium
+++ /dev/null
@@ -1,9 +0,0 @@
-Name: Breakpad, An open-source multi-platform crash reporting system
-Short Name: breakpad
-URL: https://chromium.googlesource.com/breakpad/breakpad
-Version: unknown
-License: New BSD, Apple PSL 2.0 and Apache 2.0
-Security Critical: yes
-
-The upstream Breakpad project is pulled into the breakpad/ subdirectory via
-DEPS.
diff --git a/third_party/leveldatabase/README.chromium b/third_party/leveldatabase/README.chromium
index acb1764f..6456d606 100644
--- a/third_party/leveldatabase/README.chromium
+++ b/third_party/leveldatabase/README.chromium
@@ -26,5 +26,3 @@
 * Handle in-process exclusive file locks, based on src/util/env_posix.cc
 * Unit tests for the Chromium environment.
 * db_bench is built as leveldb_db_bench in Chromium.
-* leveldb_chrome::NewMemEnv() to create memory Env instances that are tracked to
-  know if a database open request is in-memory.
diff --git a/third_party/leveldatabase/chromium_logger.h b/third_party/leveldatabase/chromium_logger.h
index 47114a4..8e174852 100644
--- a/third_party/leveldatabase/chromium_logger.h
+++ b/third_party/leveldatabase/chromium_logger.h
@@ -11,7 +11,9 @@
 
 #include "base/files/file.h"
 #include "base/format_macros.h"
+#include "base/strings/string_util.h"
 #include "base/time/time.h"
+#include "third_party/leveldatabase/src/include/leveldb/env.h"
 
 namespace leveldb {
 
diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc
index 6c484d23..4f9f233 100644
--- a/third_party/leveldatabase/env_chromium.cc
+++ b/third_party/leveldatabase/env_chromium.cc
@@ -1397,20 +1397,12 @@
                        const std::string& name,
                        std::unique_ptr<leveldb::DB>* dbptr) {
   DBTracker::TrackedDB* tracked_db = nullptr;
-  leveldb::Status s;
-  if (options.env && leveldb_chrome::IsMemEnv(options.env)) {
-    // Zero size cache to prevent cache hits.
-    static leveldb::Cache* s_empty_cache = leveldb::NewLRUCache(0);
-    Options mem_options = options;
-    mem_options.block_cache = s_empty_cache;
-    mem_options.write_buffer_size = 0;  // minimum size.
-    s = DBTracker::GetInstance()->OpenDatabase(mem_options, name, &tracked_db);
-  } else {
-    s = DBTracker::GetInstance()->OpenDatabase(options, name, &tracked_db);
-  }
-  if (s.ok())
+  leveldb::Status status =
+      DBTracker::GetInstance()->OpenDatabase(options, name, &tracked_db);
+  if (status.ok()) {
     dbptr->reset(tracked_db);
-  return s;
+  }
+  return status;
 }
 
 }  // namespace leveldb_env
diff --git a/third_party/leveldatabase/env_chromium.h b/third_party/leveldatabase/env_chromium.h
index abb1d90b..50e5018 100644
--- a/third_party/leveldatabase/env_chromium.h
+++ b/third_party/leveldatabase/env_chromium.h
@@ -318,15 +318,10 @@
   DISALLOW_COPY_AND_ASSIGN(DBTracker);
 };
 
-// Opens a database with the specified "name" and "options" (see note) and
-// exposes it to Chrome's tracing (see DBTracker for details). The function
-// guarantees that:
+// Opens a database and exposes it to Chrome's tracing (see DBTracker for
+// details). The function guarantees that:
 //   1. |dbptr| is not touched on failure
 //   2. |dbptr| is not NULL on success
-//
-// Note: All |options| values are honored, except if options.env is an in-memory
-// Env. In this case the block cache is disabled and a minimum write buffer size
-// is used to conserve memory with all other values honored.
 leveldb::Status OpenDB(const leveldb_env::Options& options,
                        const std::string& name,
                        std::unique_ptr<leveldb::DB>* dbptr);
diff --git a/third_party/leveldatabase/env_chromium_unittest.cc b/third_party/leveldatabase/env_chromium_unittest.cc
index 617a52c..5225087 100644
--- a/third_party/leveldatabase/env_chromium_unittest.cc
+++ b/third_party/leveldatabase/env_chromium_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/trace_event/process_memory_dump.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/leveldatabase/env_chromium.h"
-#include "third_party/leveldatabase/leveldb_chrome.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
 
 #define FPL FILE_PATH_LITERAL
@@ -435,15 +434,6 @@
   delete untracked_db;
 }
 
-TEST_F(ChromiumEnvDBTrackerTest, CheckInMemoryEnv) {
-  Env* env = leveldb::Env::Default();
-  ASSERT_TRUE(env != nullptr);
-  EXPECT_FALSE(leveldb_chrome::IsMemEnv(env));
-
-  std::unique_ptr<leveldb::Env> memenv(leveldb_chrome::NewMemEnv(env));
-  EXPECT_TRUE(leveldb_chrome::IsMemEnv(memenv.get()));
-}
-
 }  // namespace leveldb_env
 
 int main(int argc, char** argv) { return base::TestSuite(argc, argv).Run(); }
diff --git a/third_party/leveldatabase/leveldb_chrome.cc b/third_party/leveldatabase/leveldb_chrome.cc
index fd47fba..2529092 100644
--- a/third_party/leveldatabase/leveldb_chrome.cc
+++ b/third_party/leveldatabase/leveldb_chrome.cc
@@ -5,13 +5,9 @@
 #include "third_party/leveldatabase/leveldb_chrome.h"
 
 #include <memory>
-
 #include "base/bind.h"
-#include "base/containers/flat_set.h"
 #include "base/memory/memory_pressure_listener.h"
 #include "base/sys_info.h"
-#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
-#include "util/mutexlock.h"
 
 using MemoryPressureLevel = base::MemoryPressureListener::MemoryPressureLevel;
 using leveldb::Cache;
@@ -63,23 +59,6 @@
     web_block_cache()->Prune();
   }
 
-  void DidCreateChromeMemEnv(leveldb::Env* env) {
-    leveldb::MutexLock l(&env_mutex_);
-    DCHECK(in_memory_envs_.find(env) == in_memory_envs_.end());
-    in_memory_envs_.insert(env);
-  }
-
-  void WillDestroyChromeMemEnv(leveldb::Env* env) {
-    leveldb::MutexLock l(&env_mutex_);
-    DCHECK(in_memory_envs_.find(env) != in_memory_envs_.end());
-    in_memory_envs_.erase(env);
-  }
-
-  bool IsInMemoryEnv(const leveldb::Env* env) const {
-    leveldb::MutexLock l(&env_mutex_);
-    return in_memory_envs_.find(env) != in_memory_envs_.end();
-  }
-
  private:
   ~Globals() {}
 
@@ -87,28 +66,10 @@
   std::unique_ptr<Cache> browser_block_cache_;  // Never null.
   // Listens for the system being under memory pressure.
   std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
-  mutable leveldb::port::Mutex env_mutex_;
-  base::flat_set<leveldb::Env*> in_memory_envs_;
 
   DISALLOW_COPY_AND_ASSIGN(Globals);
 };
 
-class ChromeMemEnv : public leveldb::EnvWrapper {
- public:
-  ChromeMemEnv(leveldb::Env* base_env)
-      : EnvWrapper(leveldb::NewMemEnv(base_env)), base_env_(target()) {
-    Globals::GetInstance()->DidCreateChromeMemEnv(this);
-  }
-
-  ~ChromeMemEnv() override {
-    Globals::GetInstance()->WillDestroyChromeMemEnv(this);
-  }
-
- private:
-  std::unique_ptr<leveldb::Env> base_env_;
-  DISALLOW_COPY_AND_ASSIGN(ChromeMemEnv);
-};
-
 }  // namespace
 
 // Returns a separate (from the default) block cache for use by web APIs.
@@ -124,13 +85,4 @@
   return Globals::GetInstance()->browser_block_cache();
 }
 
-bool IsMemEnv(const leveldb::Env* env) {
-  DCHECK(env);
-  return Globals::GetInstance()->IsInMemoryEnv(env);
-}
-
-leveldb::Env* NewMemEnv(leveldb::Env* base_env) {
-  return new ChromeMemEnv(base_env);
-}
-
 }  // namespace leveldb_chrome
diff --git a/third_party/leveldatabase/leveldb_chrome.h b/third_party/leveldatabase/leveldb_chrome.h
index 590f1c9..aea1879 100644
--- a/third_party/leveldatabase/leveldb_chrome.h
+++ b/third_party/leveldatabase/leveldb_chrome.h
@@ -6,7 +6,6 @@
 #define THIRD_PARTY_LEVELDATABASE_LEVELDB_CHROME_H_
 
 #include "leveldb/cache.h"
-#include "leveldb/env.h"
 
 namespace leveldb_chrome {
 
@@ -18,12 +17,6 @@
 // *does not* own the returned instance.
 extern leveldb::Cache* GetSharedBrowserBlockCache();
 
-// Determine if a leveldb::Env stores the file data in RAM.
-extern bool IsMemEnv(const leveldb::Env* env);
-
-// Creates an in-memory Env for which all files are stored in the heap.
-extern leveldb::Env* NewMemEnv(leveldb::Env* base_env);
-
 }  // namespace leveldb_chrome
 
 #endif  // THIRD_PARTY_LEVELDATABASE_LEVELDB_CHROME_H_
diff --git a/third_party/minizip/BUILD.gn b/third_party/minizip/BUILD.gn
index c2c7ef883..990b101d 100644
--- a/third_party/minizip/BUILD.gn
+++ b/third_party/minizip/BUILD.gn
@@ -2,9 +2,17 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-config("minizip_warnings") {
+config("minizip_compiler_flags") {
   if (is_clang) {
     cflags = [ "-Wno-unused-function" ]
+
+    if (!is_nacl) {
+      cflags += [
+        "-maes",
+        "-msse3",
+        "-msse4.1",
+      ]
+    }
   }
 }
 
@@ -14,28 +22,27 @@
 
 static_library("minizip") {
   sources = [
-    # TODO(yawano): AES part cannot be compiled in pnacl.
-    # "src/aes/aes.h",
-    # "src/aes/aescrypt.c",
-    # "src/aes/aeskey.c",
-    # "src/aes/aesopt.h",
-    # "src/aes/aestab.c",
-    # "src/aes/aestab.h",
-    # "src/aes/aes_ni.c",
-    # "src/aes/aes_ni.h",
-    # "src/aes/aes_via_ace.h",
-    # "src/aes/brg_endian.h",
-    # "src/aes/brg_types.h",
-    # "src/aes/fileenc.c",
-    # "src/aes/fileenc.h",
-    # "src/aes/hmac.c",
-    # "src/aes/hmac.h",
-    # "src/aes/prng.c",
-    # "src/aes/prng.h",
-    # "src/aes/pwd2key.c",
-    # "src/aes/pwd2key.h",
-    # "src/aes/sha1.c",
-    # "src/aes/sha1.h",
+    "src/aes/aes.h",
+    "src/aes/aes_ni.c",
+    "src/aes/aes_ni.h",
+    "src/aes/aes_via_ace.h",
+    "src/aes/aescrypt.c",
+    "src/aes/aeskey.c",
+    "src/aes/aesopt.h",
+    "src/aes/aestab.c",
+    "src/aes/aestab.h",
+    "src/aes/brg_endian.h",
+    "src/aes/brg_types.h",
+    "src/aes/fileenc.c",
+    "src/aes/fileenc.h",
+    "src/aes/hmac.c",
+    "src/aes/hmac.h",
+    "src/aes/prng.c",
+    "src/aes/prng.h",
+    "src/aes/pwd2key.c",
+    "src/aes/pwd2key.h",
+    "src/aes/sha1.c",
+    "src/aes/sha1.h",
     "src/crypt.c",
     "src/crypt.h",
     "src/ioapi.c",
@@ -50,15 +57,13 @@
     "src/zip.h",
   ]
 
-  defines = [
-    # "HAVE_AES"
-  ]
+  defines = [ "HAVE_AES" ]
 
   if (is_nacl) {
     defines += [ "USE_FILE32API" ]
   }
 
-  configs += [ ":minizip_warnings" ]
+  configs += [ ":minizip_compiler_flags" ]
 
   public_configs = [ ":minizip_include_dirs" ]
 
diff --git a/third_party/minizip/README.chromium b/third_party/minizip/README.chromium
index 0226149..57309c86 100644
--- a/third_party/minizip/README.chromium
+++ b/third_party/minizip/README.chromium
@@ -2,7 +2,7 @@
 Short name: minizip
 URL: https://github.com/nmoinvaz/minizip
 Version: 0
-Revision: dc3ad01e3d5928e9105f770b7e896a8e9fe0d3b4
+Revision: e07e141475220196b55294c8172b274cc32d642d
 Security critical: yes
 License: Custom license
 License File: src/LICENSE
diff --git a/tools/checklicenses/checklicenses.py b/tools/checklicenses/checklicenses.py
index 3c84c26..ecd2a15 100755
--- a/tools/checklicenses/checklicenses.py
+++ b/tools/checklicenses/checklicenses.py
@@ -119,6 +119,11 @@
         'UNKNOWN',
     ],
 
+    # http://code.google.com/p/google-breakpad/issues/detail?id=450
+    'breakpad/src': [
+        'UNKNOWN',
+    ],
+
     'buildtools/third_party/libc++/trunk/test': [
         # http://llvm.org/bugs/show_bug.cgi?id=25980
         'UNKNOWN',
@@ -181,11 +186,6 @@
         'UNKNOWN',
     ],
 
-    # https://crbug.com/google-breakpad/450
-    'third_party/breakpad/breakpad': [
-        'UNKNOWN',
-    ],
-
     # http://crbug.com/603946
     # https://github.com/google/oauth2client/issues/331
     # Just imports googleapiclient. Chromite is not shipped.
diff --git a/tools/msan/blacklist.txt b/tools/msan/blacklist.txt
index feada5c1..40ea4b8 100644
--- a/tools/msan/blacklist.txt
+++ b/tools/msan/blacklist.txt
@@ -20,5 +20,5 @@
 fun:unpack_RGB888
 
 # False positives due to use of linux_syscall_support. http://crbug.com/394028
-src:*/third_party/breakpad/breakpad/src/*
+src:*/breakpad/src/*
 src:*/components/crash/content/app/breakpad_linux.cc
diff --git a/tools/perf/benchmarks/loading.py b/tools/perf/benchmarks/loading.py
index 0e8ff58..ca0bbcf7 100644
--- a/tools/perf/benchmarks/loading.py
+++ b/tools/perf/benchmarks/loading.py
@@ -31,8 +31,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.LoadingDesktopStorySet(
-        cache_temperatures=[cache_temperature.PCV1_COLD,
-                            cache_temperature.PCV1_WARM,])
+        cache_temperatures=[cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn
index 850be94..54a039c 100644
--- a/tools/perf/chrome_telemetry_build/BUILD.gn
+++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -38,14 +38,14 @@
   }
 
   if (is_linux) {
-    data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+    data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
   }
 
   if (is_mac) {
     data_deps += [
+      "//breakpad:dump_syms",
       "//chrome:chrome_framework",
       "//chrome:chrome_helper_app",
-      "//third_party/breakpad:dump_syms",
       "//third_party/crashpad/crashpad/tools:crashpad_database_util",
     ]
   }
diff --git a/tools/perf/contrib/cros_benchmarks/page_cycler_v2.py b/tools/perf/contrib/cros_benchmarks/page_cycler_v2.py
index bfaf8158..8821a5e 100644
--- a/tools/perf/contrib/cros_benchmarks/page_cycler_v2.py
+++ b/tools/perf/contrib/cros_benchmarks/page_cycler_v2.py
@@ -55,7 +55,7 @@
   def CreateStorySet(self, options):
     return page_sets.Typical25PageSet(run_no_page_interactions=True,
         cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
@@ -78,7 +78,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.IntlArFaHePageSet(cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
@@ -101,7 +101,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.IntlEsFrPtBrPageSet(cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
@@ -124,7 +124,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.IntlHiRuPageSet(cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
@@ -146,7 +146,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.IntlJaZhPageSet(cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
@@ -169,7 +169,7 @@
 
   def CreateStorySet(self, options):
     return page_sets.IntlKoThViPageSet(cache_temperatures=[
-          cache_temperature.PCV1_COLD, cache_temperature.PCV1_WARM])
+          cache_temperature.COLD, cache_temperature.WARM])
 
   def GetExpectations(self):
     class StoryExpectations(story.expectations.StoryExpectations):
diff --git a/tools/perf/page_sets/loading_desktop.py b/tools/perf/page_sets/loading_desktop.py
index dc4e8ff..f2ac38b3 100644
--- a/tools/perf/page_sets/loading_desktop.py
+++ b/tools/perf/page_sets/loading_desktop.py
@@ -22,7 +22,7 @@
 
     if cache_temperatures is None:
       cache_temperatures = [
-          cache_temperature_module.PCV1_COLD, cache_temperature_module.PCV1_WARM
+          cache_temperature_module.COLD, cache_temperature_module.WARM
       ]
     # Passed as (story, name) tuple.
     self.AddStories(
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index 5e0d594..6121fe3 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -104,15 +104,20 @@
   viz::mojom::CompositorFrameSinkClientPtr client;
   viz::mojom::CompositorFrameSinkClientRequest client_request =
       mojo::MakeRequest(&client);
-  constexpr bool enable_surface_synchronization = true;
+
+  viz::ClientLayerTreeFrameSink::InitParams params;
+  params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
+  params.compositor_frame_sink_info = std::move(sink_info);
+  params.client_request = std::move(client_request);
+  params.hit_test_data_provider =
+      base::MakeUnique<HitTestDataProviderAura>(window_);
+  params.local_surface_id_provider =
+      base::MakeUnique<viz::DefaultLocalSurfaceIdProvider>();
+  params.enable_surface_synchronization = true;
+
   auto layer_tree_frame_sink = base::MakeUnique<viz::ClientLayerTreeFrameSink>(
       std::move(context_provider), nullptr /* worker_context_provider */,
-      gpu_memory_buffer_manager, nullptr /* shared_bitmap_manager */,
-      nullptr /* synthetic_begin_frame_source */, std::move(sink_info),
-      std::move(client_request),
-      base::MakeUnique<HitTestDataProviderAura>(window_),
-      base::MakeUnique<viz::DefaultLocalSurfaceIdProvider>(),
-      enable_surface_synchronization);
+      &params);
   window_tree_client_->AttachCompositorFrameSink(
       server_id(), std::move(sink_request), std::move(client));
   return layer_tree_frame_sink;