diff -up chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn
--- build/linux/unbundle/libjpeg.gn.gnsystem	2017-07-25 15:04:48.000000000 -0400
+++ build/linux/unbundle/libjpeg.gn	2017-07-31 10:38:25.879951641 -0400
@@ -16,6 +16,10 @@ source_set("libjpeg") {
   libs = [ "jpeg" ]
 }
 
+config("system_libjpeg") {
+  defines = [ "USE_SYSTEM_LIBJPEG=1" ]
+}
+
 source_set("simd") {
 }
 
diff -up chromium-60.0.3112.78/build/linux/unbundle/libusb.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/libusb.gn
--- build/linux/unbundle/libusb.gn.gnsystem	2017-07-31 10:38:25.880951622 -0400
+++ build/linux/unbundle/libusb.gn	2017-07-31 10:38:25.879951641 -0400
@@ -0,0 +1,24 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/linux/pkg_config.gni")
+import("//build/shim_headers.gni")
+
+pkg_config("system_libusb") {
+  packages = [ "libusb-1.0" ]
+}
+
+shim_headers("libusb_shim") {
+  root_path = "src/libusb"
+  headers = [
+    "libusb.h",
+  ]
+}
+
+source_set("libusb") {
+  deps = [
+    ":libusb_shim",
+  ]
+  public_configs = [ ":system_libusb" ]
+}
diff -up chromium-60.0.3112.78/build/linux/unbundle/opus.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/opus.gn
--- build/linux/unbundle/opus.gn.gnsystem	2017-07-25 15:04:48.000000000 -0400
+++ build/linux/unbundle/opus.gn	2017-07-31 10:38:25.880951622 -0400
@@ -1,3 +1,164 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/linux/pkg_config.gni")
+import("//build/shim_headers.gni")
+import("//testing/test.gni")
+
+pkg_config("system_opus") {
+  packages = [ "opus" ]
+}
+
+shim_headers("opus_shim") {
+  root_path = "src/include"
+  headers = [
+    "opus_custom.h",
+    "opus_defines.h",
+    "opus_multistream.h",
+    "opus_types.h",
+    "opus.h",
+  ]
+}
+
+source_set("opus") {
+  deps = [
+    ":opus_shim",
+  ]
+  public_configs = [ ":system_opus" ]
+}
+
+config("opus_test_config") {
+  include_dirs = [
+    "src/celt",
+    "src/silk",
+  ]
+
+  if (is_win) {
+    defines = [ "inline=__inline" ]
+  }
+  if (is_android) {
+    libs = [ "log" ]
+  }
+  if (is_clang) {
+    cflags = [ "-Wno-absolute-value" ]
+  }
+}
+
+executable("opus_compare") {
+  sources = [
+    "src/src/opus_compare.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+  ]
+
+  deps = [
+    ":opus",
+    "//build/config/sanitizers:deps",
+    "//build/win:default_exe_manifest",
+  ]
+}
+
+executable("opus_demo") {
+  sources = [
+    "src/src/opus_demo.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+  ]
+
+  deps = [
+    ":opus",
+    "//build/config/sanitizers:deps",
+    "//build/win:default_exe_manifest",
+  ]
+}
+
+test("test_opus_api") {
+  sources = [
+    "src/tests/test_opus_api.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+  ]
+
+  deps = [
+    ":opus",
+  ]
+}
+
+test("test_opus_encode") {
+  sources = [
+    "src/tests/test_opus_encode.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+  ]
+
+  deps = [
+    ":opus",
+  ]
+}
+
+# GN orders flags on a target before flags from configs. The default config
+# adds -Wall, and this flag have to be after -Wall -- so they need to
+# come from a config and can't be on the target directly.
+config("test_opus_decode_config") {
+  # test_opus_decode passes a null pointer to opus_decode() for an argument
+  # marked as requiring a non-null value by the nonnull function attribute,
+  # and expects opus_decode() to fail. Disable the -Wnonnull option to avoid
+  # a compilation error if -Werror is specified.
+  if (is_posix) {
+    cflags = [ "-Wno-nonnull" ]
+  }
+}
+
+test("test_opus_decode") {
+  sources = [
+    "src/tests/test_opus_decode.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+    ":test_opus_decode_config",
+  ]
+
+  deps = [
+    ":opus",
+  ]
+}
+
+test("test_opus_padding") {
+  sources = [
+    "src/tests/test_opus_padding.c",
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [
+    "//build/config/compiler:no_chromium_code",
+    ":opus_test_config",
+  ]
+
+  deps = [
+    ":opus",
+  ]
+}
+
 # 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.
diff -up chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py.gnsystem chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py
--- build/linux/unbundle/replace_gn_files.py.gnsystem	2017-07-31 10:38:25.880951622 -0400
+++ build/linux/unbundle/replace_gn_files.py	2017-07-31 10:39:58.067159914 -0400
@@ -26,6 +26,7 @@ REPLACEMENTS = {
   'libevent': 'base/third_party/libevent/BUILD.gn',
   'libjpeg': 'build/secondary/third_party/libjpeg_turbo/BUILD.gn',
   'libpng': 'third_party/libpng/BUILD.gn',
+  'libusb': 'third_party/libusb/BUILD.gn',
   'libvpx': 'third_party/libvpx/BUILD.gn',
   'libwebp': 'third_party/libwebp/BUILD.gn',
   'libxml': 'third_party/libxml/BUILD.gn',
